Top / Programming / Python / Python Tips / ZIPファイルを作成する

ZIPファイルを作成する

PythonにはZIPファイルを扱う zipfile モジュールがあります。

ZIPアーカイブを扱うための zipfile モジュールをインポートする

import zipfile

ZIPアーカイブを作成する

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アーカイブにファイルを追加する

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()

関連