13.2. gzip — gzip ファイルのサポート¶
ソースコード: Lib/gzip.py
このモジュールは、GNU の gzip や gunzip のようにファイルを圧縮、展開するシンプルなインターフェイスを提供しています。
データ圧縮は zlib モジュールで提供されています。
gzip は GzipFile クラスと、簡易関数 open()、compress()、および decompress() を提供しています。GzipFile クラスは通常の ファイルオブジェクト と同様に gzip 形式のファイルを読み書きし、データを自動的に圧縮または展開します。
compress や pack 等によって作成され、gzip や gunzip が展開できる他のファイル形式についてはこのモジュールは対応していないので注意してください。
このモジュールは以下の項目を定義しています:
-
gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)¶ gzip 圧縮ファイルをバイナリまたはテキストモードで開き、ファイルオブジェクト を返します。
引数 filename には実際のファイル名 (
strまたはbytesオブジェクト) か、既存のファイルオブジェクトを指定します。引数 mode には、バイナリモード用に
'r'、'rb'、'a'、'ab'、'w'、'wb'、'x'、または'xb'、テキストモード用に'rt'、'at'、'wt'、または'xt'を指定できます。デフォルトは'rb'です。引数 compresslevel は
GzipFileコンストラクタと同様に 0 から 9 の整数を取ります。バイナリモードでは、この関数は
GzipFileコンストラクタGzipFile(filename, mode, compresslevel)と等価です。この時、引数 encoding、errors、および newline を指定してはいけません。テキストモードでは、
GzipFileオブジェクトが作成され、指定されたエンコーディング、エラーハンドラの挙動、および改行文字でio.TextIOWrapperインスタンスにラップされます。バージョン 3.3 で変更: filename にファイルオブジェクト指定のサポート、テキストモードのサポート、および引数に encoding、errors、および newline を追加しました。
バージョン 3.4 で変更: Added support for the
'x','xb'and'xt'modes.
-
class
gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶ GzipFileクラスのコンストラクタです。GzipFileオブジェクトはtruncate()メソッドを除くほとんどの ファイルオブジェクト のメソッドをシミュレートします。少なくとも fileobj および filename は有効な値でなければなりません。クラスの新しいインスタンスは、 fileobj に基づいて作成されます。 fileobj は通常のファイル、
io.BytesIOオブジェクト、 そしてその他ファイルをシミュレートできるオブジェクトでかまいません。 値はデフォルトでは None で、その場合ファイルオブジェクトを生成するために filename を開きます。fileobj が
Noneでない場合、filename 引数は gzip ファイルヘッダにインクルードされることのみに使用されます。gzip ファイルヘッダは圧縮されていないファイルの元の名前をインクルードするかもしれません。認識可能な場合、規定値は fileobj のファイル名です。そうでない場合、規定値は空の文字列で、元のファイル名はヘッダにはインクルードされません。引数 mode は、ファイルを読み込むのか書き出すのかによって、
'r'、'rb'、'a'、'ab'、'w'、'wb'、'x'、および'xb'のいずれかになります。fileobj のファイルモードが認識可能な場合、mode はデフォルトで fileobj のモードと同じになります。そうでない場合、デフォルトのモードは'rb'です。ファイルは常にバイナリモードで開かれることに注意してください。圧縮ファイルをテキストモードで開く場合、
open()(またはGzipFileをio.TextIOWrapperでラップしたオブジェクト) を使ってください。引数 compresslevel は
0から9の整数を取り、圧縮レベルを制御します;1は最も高速で最小限の圧縮を行い、9は最も低速ですが最大限の圧縮を行います。0は圧縮しません。デフォルトは9です。mtime 引数は、圧縮時にストリームの最終更新日時フィールドに書き込まれるオプションの数値のタイムスタンプです。これは、圧縮モードでのみ提供することができます。省略された場合か
Noneである場合、現在時刻が使用されます。詳細については、mtime属性を参照してください。圧縮したデータの後ろにさらに何か追加したい場合もあるので、
GzipFileオブジェクトのclose()メソッド呼び出しは fileobj を閉じません。 このため、書き込みのためにオープンしたio.BytesIOオブジェクトを fileobj として渡し、(GzipFileをclose()した後に)io.BytesIOオブジェクトのgetvalue()メソッドを使って書き込んだデータの入っているメモリバッファを取得することができます。GzipFileは、イテレーションとwith文を含むio.BufferedIOBaseインターフェイスをサポートしています。truncate()メソッドのみ実装されていません。GzipFileは以下のメソッドと属性も提供しています:-
peek(n)¶ ファイル内の位置を移動せずに展開した n バイトを読み込みます。呼び出し要求を満たすために、圧縮ストリームに対して最大 1 回の単一読み込みが行われます。返されるバイト数はほぼ要求した値になります。
注釈
peek()の呼び出しではGzipFileのファイル位置は変わりませんが、下層のファイルオブジェクトの位置が変わる惧れがあります。(e.g.GzipFileが fileobj 引数で作成された場合)バージョン 3.2 で追加.
-
mtime¶ 展開時に、最後に読み取られたヘッダーの最終更新日時フィールドの値は、この属性から整数として読み取ることができます。ヘッダーを読み取る前の初期値は
Noneです。gzip で圧縮されたすべてのストリームは、このタイムスタンプフィールドを含む必要があります。gunzip などの一部のプログラムがこのタイムスタンプを使用します。形式は、
time.time()の返り値や、os.stat()が返すオブジェクトのst_mtime属性と同一です。
バージョン 3.2 で変更: ゼロパディングされたファイルやシーク出来ないファイルがサポートされました。
バージョン 3.3 で変更:
io.BufferedIOBase.read1()メソッドを実装しました。バージョン 3.4 で変更:
'x'ならびに'xb'モードがサポートされました。バージョン 3.5 で変更: 任意の バイトライクオブジェクト の書き込みがサポートされました。
read()メソッドがNoneを引数として受け取るようになりました。-
-
gzip.compress(data, compresslevel=9)¶ data を圧縮し、圧縮データを含む
bytesオブジェクトを返します。compresslevel の意味は上記GzipFileコンストラクタと同じです。バージョン 3.2 で追加.
13.2.1. 使い方の例¶
圧縮されたファイルを読み込む例:
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
file_content = f.read()
GZIP 圧縮されたファイルを作成する例:
import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
f.write(content)
既存のファイルを GZIP 圧縮する例:
import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:
with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
バイナリ文字列を GZIP 圧縮する例:
import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)
参考
zlibモジュールgzip ファイル形式のサポートを行うために必要な基本ライブラリモジュール。
