ゼロからの業務効率化ノート

30代未経験から始まったノーコード&Pythonチャレンジ

【異なるフォルダのPDFも結合!】Pythonでスマートなファイル結合テクニックその2


ぬこ将軍です🐈
仕事でありがちな請求書や点検表とかの電子ファイルって、提出する時はバラバラではなくて1つにまとめて提出しないといけない時ってありませんか?

ファイル結合のフリーソフトとかがあればまとめるのはラクですが、ソフトのインストールにわざわざシステム管理者の許可が必要だったり、細かい制約があったりでメンドクサイ。。。
さらにまとめたい対象のファイルが別のフォルダに保存されていたとしたら、それはもう非常に面倒なわけで・・・


今回は「Pythonで複数のPDFファイルをまとめる方法」についての第2弾です。
第1弾では手軽にPDFファイルを結合するPythonプログラムの実施例を共有しました。
nukoshogun.hatenablog.com

自分は業務の中で複数のPDFファイルをまとめる機会が多いのですが、まとめたい複数のファイルが色んなフォルダにあると正直しんどいです(笑)
なので第2弾は、異なるフォルダにあるPDFファイルも一緒にまとめるプログラム実施例を共有します!

  • 複数のファイルまとめという、面倒な作業を一刻も早く無くしたい!
  • Pythonの勉強を始めたばかりで、何か役に立ちそうなプログラムを作ってみたい!

そんな方々の参考になりましたら幸いです。



【違うフォルダにも対応】Pythonで複数のPDFファイルをまとめる方法

私が実践したことを先に結論として書きます。

  1. 必要なライブラリをインポートする。
  2. まとめたい月のフォルダ全てを指定するコードを書く。
  3. 出力先のフォルダを新規作成するコードを書く。
  4. 指定したフォルダ内のファイルを結合するコードを書く。
  5. 別フォルダ内のファイルを、結合したファイルに追加するコードを書く。

以上の5ステップについてそれぞれ書いていきますが、実は第1弾と手順が同じなのが大部分です。なので第1弾と違う部分だけ具体的に書いていきます。

第1弾はコチラ⇓
【手軽にPDFを結合!】Pythonを使ったスマートなファイル結合テクニック - ゼロからの業務効率化ノート

必要なPythonライブラリをインポートする

必要なライブラリですが、実は第1弾と同じです。

どんなプログラムにも言えることですが、ライブラリはインポートしないと使えないので、プログラムの最初に書く習慣をつけると良いと思います。

まとめたい月のフォルダ全てを指定するコードを書く

第1弾と異なり、今回は2つのフォルダにあるPDFファイルを使わなければなりません。
別棟の点検結果のファイルも扱うという想定で、点検結果フォルダの下にある「2023年度_別棟」というフォルダを新たな対象としました。

とは言うものの、実はやることは第1弾と変わりません。
input関数を利用してまとめたいフォルダ月の数字を変数monthに代入し、新たな変数path2を【path2 = r"C:\~Desktop\Python遊び場\点検結果\2023年度_別棟\2023." + month】として設定しただけです。

出力先のフォルダを新規作成するコードを書く

結合したものを出力する先は1箇所でよいので、これも第1弾と同じです。

指定したフォルダ内のファイルを結合するコードを書く

さてファイルの結合ですが、自分は「まず今まで通り同じフォルダ内のファイルを結合し、その後別のフォルダ内にあるファイルを結合したファイルに追加する」という手順で実行しました。
同じフォルダ内のファイルというのは、今回のプログラムでいうと【変数filesに含まれているファイルパス文字列】を指しています(下の画像参照)。

結合については第1弾で書いていますのでそちらを参考にしていただければと思います。

第1弾はコチラ⇓
【手軽にPDFを結合!】Pythonを使ったスマートなファイル結合テクニック - ゼロからの業務効率化ノート

別フォルダ内のファイルを、結合したファイルに追加するコードを書く

結合ファイルを作成した後、別のフォルダ内にあるファイルを結合しました。今回の別フォルダの名前は「2023年度_別棟\2023.4」としています。

第1弾の時と同様に【files2 = sorted(glob.glob(path2 + "/*.pdf"))】で変数path2内にあるpdf拡張子のファイルパスを返して昇順に並べ、【merger.merge(4,files2[0])】でmergeオブジェクト(結合ファイル)に別フォルダのpdfファイルパスを挿入しています。

merger.merge(4,files2[0])ですが、第1引数の数字は挿入するページ番号を0始まりで指定しています。
そして第2引数は挿入するファイルのパスを変数で指定しています。今回はfiles2[0]としていますが、これはmerge()メソッドで挿入できるファイルが1つだからです。第2引数をfiles2としてしまうとリストをまるごと挿入する扱いになりエラーとなります。

参考サイト
note.nkmk.me

あとは【merger.write(path_out + "\\" + month + "月_○○部署2.pdf")】というコードを実行することで、指定したパスとファイル名で結合ファイルを作成しました。

こうして別のフォルダにあるファイルも無事にまとめることができました!

Pythonを使ったファイル結合テクニックまとめ

新しい結合ファイルの中身。別フォルダの結果は最終ページに挿入できている。

Pythonを使ったスマートなファイル結合テクニックの手順をまとめると以下の通りです。

  1. 必要なライブラリをインポートする。
  2. まとめたい月のフォルダ全てを指定するコードを書く。
  3. 出力先のフォルダを新規作成するコードを書く。
  4. 指定したフォルダ内のファイルを結合するコードを書く。
  5. 別フォルダ内のファイルを、結合したファイルに追加するコードを書く。

やはり手順を文章にしてみると長くなってしまうのですが、Pythonを活用することで別のフォルダにあるファイルでも簡単にファイル結合が出来るようにました!

これを読んだあなたも、Pythonを勉強しながら少しずつ面倒な作業を無くしていきませんか?