Pythonのzipfileモジュール
zipfileを作る
zip圧縮方法としてzipfile.ZIP_DEFLATEDか、zipfile.ZIP_STOREDを渡す。
# zipファイルを作る(zlibモジュールを使って圧縮) with zipfile.ZipFile('compressed.zip', 'w', zipfile.ZIP_DEFLATED) as f: f.write('a.txt') f.write('b.txt') f.write('c.txt') # zipファイルを作る(圧縮しない) with zipfile.ZipFile('not_compressed.zip', 'w', zipfile.ZIP_STORED) as f: f.write('a.txt') f.write('b.txt') f.write('c.txt')
zipファイルかどうか調べる
is_zipfileで
print zipfile.is_zipfile('a.txt') # => False print zipfile.is_zipfile('compressed.zip') # => True print zipfile.is_zipfile('not_compressed.zip') # => True
zipfileの中身を見る
namelistでファイル名のリストを取得
infolistでZipInfoオブジェクトのリストを取得
ZipInfoオブジェクトにはファイルの情報がいろいろ保存されていて圧縮前、後のサイズなんかもわかる
zipfile.ZIP_STOREDで作成したzipファイルのほうはサイズが変わっていないことを確認できる
# zipの中身を見る def print_info(zip_info): print "\tファイル名:\t", zip_info.filename print '\tコメント:\t', zip_info.comment print '\t最終更新日時:\t', datetime.datetime(*zip_info.date_time) print '\t圧縮形式:\t', zip_info.compress_type print '\t圧縮後データサイズ:\t', zip_info.compress_size, 'bytes' print '\t圧縮前データサイズ:\t', zip_info.file_size, 'bytes' with zipfile.ZipFile('compressed.zip', 'r') as f: # ファイルの一覧 print f.namelist() # => ['a.txt', 'b.txt', 'c.txt'] # ファイルの情報一覧 for info in f.infolist(): print_info(info) # => ファイル名: a.txt # => コメント: # => 最終更新日時: 2012-08-04 14:57:42 # => 圧縮形式: 8 # => 圧縮後データサイズ: 29 bytes # => 圧縮前データサイズ: 10001 bytes # => ファイル名: b.txt # => コメント: # => 最終更新日時: 2012-08-04 14:57:54 # => 圧縮形式: 8 # => 圧縮後データサイズ: 29 bytes # => 圧縮前データサイズ: 10001 bytes # => ファイル名: c.txt # => コメント: # => 最終更新日時: 2012-08-04 14:58:02 # => 圧縮形式: 8 # => 圧縮後データサイズ: 29 bytes # => 圧縮前データサイズ: 10001 bytes with zipfile.ZipFile('not_compressed.zip', 'r') as f: # ファイルの一覧 print f.namelist() # => ['a.txt', 'b.txt', 'c.txt'] # ファイルの情報一覧 for info in f.infolist(): print_info(info) # => ファイル名: a.txt # => コメント: # => 最終更新日時: 2012-08-04 14:57:42 # => 圧縮形式: 0 # => 圧縮後データサイズ: 10001 bytes # => 圧縮前データサイズ: 10001 bytes # => ファイル名: b.txt # => コメント: # => 最終更新日時: 2012-08-04 14:57:54 # => 圧縮形式: 0 # => 圧縮後データサイズ: 10001 bytes # => 圧縮前データサイズ: 10001 bytes # => ファイル名: c.txt # => コメント: # => 最終更新日時: 2012-08-04 14:58:02 # => 圧縮形式: 0 # => 圧縮後データサイズ: 10001 bytes # => 圧縮前データサイズ: 10001 bytes
zipにファイル追加
zipfile.ZipFileでmodeに'a'を指定してファイルを開けばzipにファイルを追加できる
with zipfile.ZipFile('compressed.zip', 'a', zipfile.ZIP_DEFLATED) as f: f.write('d.txt') with zipfile.ZipFile('compressed.zip', 'r') as f: print f.namelist() # => ['a.txt', 'b.txt', 'c.txt', 'd.txt'] with zipfile.ZipFile('not_compressed.zip', 'a', zipfile.ZIP_STORED) as f: f.write('d.txt') with zipfile.ZipFile('not_compressed.zip', 'r') as f: print f.namelist() # => ['a.txt', 'b.txt', 'c.txt', 'd.txt']
zipからファイルを取りだす
ZipFile.readでファイル名を指定してファイルの内容をバイト列で取得できる
# zipからファイルを取り出す with zipfile.ZipFile('compressed.zip', 'r') as f: print f.read('a.txt') with zipfile.ZipFile('not_compressed.zip', 'r') as f: print f.read('a.txt')
参考)
http://www.python.jp/doc/release/library/zipfile.html#module-zipfile