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