みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
プログラミング初心者かつWindowsユーザー向けに、Pythonでいろんな便利ツールを作る方法をお伝えしています。
メールで複数のファイルを送信したいとき、どのようにしていますか?
2,3個であればそのまま添付しちゃってもOKですが、それ以上のファイル数になると、添付も面倒ですし、受け取った相手も面倒ですよね。
そんな時に、使うのがZIPファイルです。
定期的にZIPファイルを作る必要があれば、Pythonに任せてしまうとラクチンです。
ダブルクリックでも動作させることができますし、バックアップ的にZIPファイル化するときはタスクスケジューラに登録すれば全自動で動作してくれます。
ということで、今回はPythonでファイルをZIP形式に圧縮するプログラムの作り方をお伝えします。
では、行ってみましょう!
zipfileモジュールをインポートする
PythonでZIPファイルを操作するには、標準ライブラリに含まれるzipfileモジュールを使います。
使う場合は、スクリプトの冒頭でインポートをすればOKです。
ZipFileオブジェクトを生成する
その上で、まずはzipfile.ZipFile関数を使いまして、ZipFileオブジェクトというZIPファイルの読み書きをするために使うオブジェクトを生成します。
「ジップファイル」だらけですが、混乱しないようにしてくださいねw
書き方はコチラです。
fileはフルパスで指定してもよいですし、ファイル名だけならスクリプトファイルと同階層のフォルダ配下のファイルになります。
これで、指定したファイル名でZIPファイルが、指定したモードで開かれます。
modeはどのようなモードでfileを開くかという指定になりまして、以下のような文字を指定します。
- 読み取り専用:r(デフォルト)
- 書き込み:w
- 追加書き込み:a
ZIPファイルを展開するのであれば「r」、上書きするのであれば「w」ですね。「a」を設定すれば、ZIPファイルにファイルを追加していくということもできるモードにないrます。
例として、書き込みモードで「test.zip」というzipファイルを作るであれば
myzip = zipfile.ZipFile('test.zip','w')
とします。
「test.zip」が存在していなければ、新規で作成されますよ。
ZIPファイルをwith文を使って開く
ZipFileオブジェクトとして開いたZIPファイルは、closeメソッドで閉じる必要があります。
例えば、以下のようなスクリプトですね。
import zipfile
myzip = zipfile.ZipFile('test.zip','a')
#処理
myzip.close()
ただ、closeメソッド…忘れちゃいます。それで、ZipFileオブジェクトも、open関数で開いたファイルオブジェクトと同様にwith文で括ることで、closeメソッドを省略することができますよ。
このような書き方です。
#処理
ですから、前述のスクリプトは以下のように書き換えることができます。
import zipfile
with zipfile.ZipFile('test.zip','a') as myzip:
#処理
スッキリですね!
writeメソッドでZIPファイルにファイルを追加する
こうして開いたZIPファイルにファイルを追加するには、writeメソッドを使います。
fileにフルパスまたは、スクリプトファイルと同階層のファイルを指定すればOKです。
例えば、スクリプトファイルと同階層の「test.csv」をZIPファイルとして圧縮するのであれば、以下のようにします。
import zipfile
with zipfile.ZipFile('test.zip','w') as myzip:
myzip.write('test.csv')
実行しますと、以下のように同階層のフォルダに「test.zip」ができました。
ZIPファイルの中身ものぞいてみましょう。
ちゃんと「test.csv」が含まれていますね。
まとめ
PythonでファイルをZIPファイルに圧縮する方法の基本についてお伝えしました。
- zipfileモジュールをインポート
- ZipFileオブジェクトを生成
- writeメソッドで書き込み
なんか、他のモジュールと似ていますよね。助かります。
さて、次回は複数ファイルを圧縮する準備として、フォルダツリーを渡り歩いてサブフォルダとファイルをリストアップする方法をお伝えします。
どうぞお楽しみに!