12.2. gzip
— gzip ファイルのサポート¶
ソースコード: Lib/gzip.py
このモジュールは、GNU の gzip や gunzip のようにファイルを圧縮、展開するシンプルなインターフェイスを提供しています。
データ圧縮は zlib
モジュールで提供されています。
gzip
モジュールは、Python のファイルオブジェクトに似た GzipFile
クラスを提供しています。 GzipFile
クラスは gzip フォーマットのファイルを読み書きします。自動的にデータを圧縮・伸張するので、外からは通常のファイルオブジェクトのように見えます。
compress や pack 等によって作成され、gzip や gunzip が展開できる他のファイル形式についてはこのモジュールは対応していないので注意してください。
このモジュールは以下の項目を定義しています:
-
class
gzip.
GzipFile
([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])¶ GzipFile
クラスのコンストラクタです。GzipFile
オブジェクトはreadinto()
メソッドとtruncate()
メソッドを除くほとんどの ファイルオブジェクト のメソッドをシミュレートします。少なくとも fileobj および filename は有効な値でなければなりません。クラスの新しいインスタンスは、 fileobj に基づいて作成されます。 fileobj は通常のファイル、
StringIO
オブジェクト、 そしてその他ファイルをシミュレートできるオブジェクトでかまいません。 値はデフォルトでは None で、ファイルオブジェクトを生成するために filename を開きます。fileobj が
None
でない場合、filename 引数は gzip ファイルヘッダにインクルードされることのみに使用されます。gzip ファイルヘッダは圧縮されていないファイルの元の名前をインクルードするかもしれません。認識可能な場合、規定値は fileobj のファイル名です。そうでない場合、規定値は空の文字列で、元のファイル名はヘッダにはインクルードされません。mode 引数は、ファイルを読み出すのか、書き込むのかによって、
'r'
,'rb'
,'a'
,'ab'
,'w'
, そして'wb'
のいずれかになります。 fileobj のファイルモードが認識可能な場合、 mode はデフォルトで fileobj のモードと同じになります。そうでない場合、デフォルトのモードは'rb'
です。 'b' フラグがついていなくても、ファイルがバイナリモードで開かれることを保証するために 'b' フラグが追加されます。これはプラットフォーム間での移植性のためです。引数 compresslevel は
0
から9
の整数を取り、圧縮レベルを制御します;1
は最も高速で最小限の圧縮を行い、9
は最も低速ですが最大限の圧縮を行います。0
は圧縮しません。デフォルトは9
です。引数 mtime はオプションで、圧縮時にストリームに書かれる数値型のタイムスタンプです。gzip で圧縮されたすべてのストリームはタイムスタンプを必要とします。省略された場合や
None
が渡された場合は、現在の時刻が使用されます。このモジュールは展開時にはタイムスタンプを無視しますが、gunzip などの一部のプログラムはタイムスタンプを利用します。タイムスタンプのフォーマットはtime.time()
の戻り値や、os.stat()
の戻り値となるオブジェクトのst_mtime
属性と同じです。圧縮したデータの後ろにさらに何か追記したい場合もあるので、
GzipFile
オブジェクトのclose()
メソッド呼び出しは fileobj をクローズしません。この機能によって、書き込み用にオープンしたStringIO
オブジェクトを fileobj として渡し、StringIO
オブジェクトのgetvalue()
メソッドを使って書き込んだデータの入っているメモリバッファを取得することもできます。GzipFile
はイテレーションとwith
文をサポートします。バージョン 2.7 で変更:
with
文をサポートしました。バージョン 2.7 で変更: zero-pad されたファイルのサポートが追加されました。
バージョン 2.7 で追加: mtime 引数が追加されました。
-
gzip.
open
(filename[, mode[, compresslevel]])¶ GzipFile(filename,
mode,
compresslevel)
の短縮形です。引数 filename は必須です。デフォルトで mode は'rb'
に、 compresslevel は9
に設定されています。
12.2.1. 使い方の例¶
圧縮されたファイルを読み込む例:
import gzip
with gzip.open('file.txt.gz', 'rb') as f:
file_content = f.read()
GZIP 圧縮されたファイルを作成する例:
import gzip
content = "Lots of content here"
with gzip.open('file.txt.gz', 'wb') as f:
f.write(content)
既存のファイルを GZIP 圧縮する例:
import gzip
import shutil
with open('file.txt', 'rb') as f_in, gzip.open('file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
参考
zlib
モジュール- gzip ファイル形式のサポートを行うために必要な基本ライブラリモジュール。