目次

前のトピックへ

13.1. zlibgzip 互換の圧縮

次のトピックへ

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

このページ

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

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

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

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

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

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

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

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

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 です。

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

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

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

13.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 ファイル形式のサポートを行うために必要な基本ライブラリモジュール。