PythonにはZIPファイルを扱う zipfile モジュールがあります。
ZIPアーカイブを扱うための zipfile モジュールをインポートする
import zipfile
ZIPアーカイブを作成するにはZipFileオブジェクトを使用します。
ZipFileオブジェクトのコンストラクタの引数は、
最初の引数は作成するZIPアーカイブのパス
2番目の引数は'r'なら既存のZIPファイルの読み込み、'a'なら既存のZIPファイルへの追加、'w'なら新しいZIPファイルの作成
3番目の引数はZIP圧縮法です。
zip = zipfile.ZipFile('C:\\test\\sample.zip', 'w', zipfile.ZIP_DEFLATED)
ZIPアーカイブにファイルを追加するには、ZipFile.write()を使用します。
最初の引数はアーカイブに追加するファイルのパス、
2番目の引数はZIPアーカイブ内のファイル名です。
zip.write('C:/test/test.py', 'test.py')
zip.write('C:/test/test.py', 'sample/example/test2.py')
ファイル名はユニコード文字列では保存できません。
文字コードを指定する必要があります。
zip.write(u'C:/テスト/サンプル.txt'.encode('mbcs'),
u'サンプル.txt'.encode('mbcs'))
アーカイブ内のファイル名を省略した場合は、アーカイブ内のファイル名は、ファイルのパスからドライブレターと先頭のパスセパレータを取り除いた名前になります。
# アーカイブ内のファイル名はtest/test.py
zip.write('C:/test/test.py')
ZIPアーカイブにバイト列を追加する場合は、データのメタ情報を収めたZipInfoオブジェクトが必要です。
ZipInfoオブジェクトのコンストラクタの引数は、
最初の引数はZIPアーカイブ内のファイル名
2番目の引数はファイルの日時です。
# バイナリファイルの読み込み
data = open('c:/test/sample.gif', 'rb').read()
# データのメタ情報
inf = zipfile.ZipInfo('example.gif', (2009, 1, 2, 3, 4, 5))
zip.writestr(inf, data)
最後にファイルを閉じて、完了です。
# ファイルを閉じる
zip.close()