Python で Zip ファイルを作成する


Python とソケット通信を使ってファイルを送信する必要があり、複数ファイルを Zip ファイルにして送信することにしました。作り方さえわかれば、下記のように簡単に作成することが出来ます。

Zip ファイルは格納するファイル毎に圧縮するかどうかを選択することが出来ます。PNG などの画像ファイルをは元々圧縮されているので、Zip 圧縮したとしても大して容量が減らない上に、伸張処理が必要になってしまいます。そのためあえて圧縮せずに Zip に放り込むということで無駄な圧縮伸張の時間を省くという方法もあります。

import zipfile
 
zip = zipfile.ZipFile( 'Zipファイル名', mode='w', compression=zipfile.ZIP_STORED )
# テキストファイルなど Zip 圧縮する場合
zip.write( 'Zip 圧縮する対象ファイル名', 'Zip 内に格納する名前', zipfile.ZIP_DEFLATED )
# 画像ファイルなど圧縮せずに Zip ファイルにする場合
zip.write( 'Zip 圧縮する対象ファイル名', 'Zip 内に格納する名前', zipfile.ZIP_STORED )
zip.close()

エラー処理などは省いているので、必要に応じて追加して下さい。

作成した Zip ファイルを送信したい場合はバイナリファイルとして開いてデータを読み出し、送信すれば良いです。

bin_file = open( 'Zip ファイル名', "rb" )
# bin_data に格納してこれを送信する
bin_data = bin_file.read()
bin_file.close()