目次

前のトピックへ

12.1. zlibgzip 互換の圧縮

次のトピックへ

12.3. bz2bzip2 互換の圧縮ライブラリ

このページ

12.2. gzipgzip ファイルのサポート

このモジュールは、ファイルをGNUの gzip, gunzip のように圧縮、伸長するシンプルなインタフェースを提供しています。

データ圧縮は zlib モジュールで提供されています。

gzip モジュールは、Pythonのファイルオブジェクトに似た GzipFile クラスを提供しています。 GzipFile クラスは gzip フォーマットのファイルを読み書きします。自動的にデータを圧縮・伸張するので、外からは通常のファイルオブジェクトのように見えます。

compresspack 等によって作られる、 gzipgunzip が伸長できる他のファイルフォーマットについては、このモジュールは対応していないので注意してください。

他のアーカイブフォーマットについては、 bz2, zipfile, tarfile モジュールを参照してください。

このモジュールでは以下の項目を定義しています:

class gzip.GzipFile([filename[, mode[, compresslevel[, fileobj[, mtime]]]]])

GzipFile クラスのコンストラクタです。 GzipFile オブジェクトは readinto()truncate() メソッドを除くほとんどのファイルオブジェクトのメソッドをシミュレートします。少なくとも fileobj および filename は有効な値でなければなりません。

クラスの新しいインスタンスは、 fileobj に基づいて作成されます。 fileobj は通常のファイル、 StringIO オブジェクト、そしてその他ファイルをシミュレートできるオブジェクトでかまいません。値はデフォルトでは None で、ファイルオブジェクトを生成するために filename を開きます。

gzip ファイルヘッダ中には、ファイルが解凍されたときの元のファイル名を収めることができますが、 fileobjNone でない場合、引数 filename がファイル名として認識できる文字列であれば、 filename はファイルヘッダに収めるためだけに使われます。そうでない場合(この値はデフォルトでは空文字列です)、元のファイル名はヘッダに収められません。

mode 引数は、ファイルを読み出すのか、書き込むのかによって、 'r', 'rb', 'a', 'ab', 'w', そして 'wb' のいずれかになります。 fileobj のファイルモードが認識可能な場合、 mode はデフォルトで fileobj のモードと同じになります。そうでない場合、デフォルトのモードは 'rb' です。 ‘b’ フラグがついていなくても、ファイルがバイナリモードで開かれることを保証するために ‘b’ フラグが追加されます。これはプラットフォーム間での移植性のためです。

compresslevel 引数は 1 から 9 までの整数で、圧縮のレベルを制御します。 1 は最も高速で最小限の圧縮しか行いません。 9 は最も低速ですが、最大限の圧縮を行います。デフォルトの値は 9 です。

mtime 引数はオプションで、圧縮時にストリームに書かれる数値型のタイムスタンプです。 gzip で圧縮された全てのストリームはタイムスタンプを必要とします。省略された場合や None が渡された場合は、現在の時刻が利用されます。このモジュールは伸長時にはタイムスタンプを無視しますが、 gunzip などのいくつかのプログラムはタイムスタンプを利用します。タイムスタンプのフォーマットは time.time() の戻り値や、 os.stat() の戻り値となるオブジェクトの st_mtime メンバと同じです。

圧縮したデータの後ろにさらに何か追記したい場合もあるので、 GzipFile オブジェクトの close() メソッド呼び出しは fileobj をクローズしません。この機能によって、書き込みのためにオープンした StringIO オブジェクトを fileobj として渡し、(GzipFileclose() した後に) StringIO オブジェクトの getvalue() メソッドを使って書き込んだデータの入っているメモリバッファを取得することができます。

GzipFile はイテレーションと with 文をサポートします。

バージョン 2.7 で変更: with 構文のサポートが追加されました。

バージョン 2.7 で変更: zero-pad されたファイルのサポートが追加されました。

gzip.open(filename[, mode[, compresslevel]])

GzipFile(filename, mode, compresslevel) の短縮形です。引数 filename は必須です。デフォルトで mode'rb' に、 compresslevel9 に設定されています。

12.2.1. 使い方の例

圧縮されたファイルを読み込む例:

import gzip
f = gzip.open('/home/joe/file.txt.gz', 'rb')
file_content = f.read()
f.close()

GZIP圧縮されたファイルを作成する例:

import gzip
content = "Lots of content here"
f = gzip.open('/home/joe/file.txt.gz', 'wb')
f.write(content)
f.close()

既存のファイルをGZIP圧縮する例:

import gzip
f_in = open('/home/joe/file.txt', 'rb')
f_out = gzip.open('/home/joe/file.txt.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()

参考

Module zlib
gzip ファイル形式のサポートを行うために必要な基本ライブラリモジュール。