# 7.16 `gzip` -- gzip ファイルのサポート

`zlib` モジュールで提供されているデータ圧縮は、GNU の 圧縮プログラム gzip のものと互換性があります。 そこで、`gzip` モジュールでは、gzip 形式の ファイルを読み書きするための `GzipFile` クラスを提供します。 このクラスのオブジェクトは自動的にデータを圧縮または解凍するので、 通常のファイルオブジェクトのように見えます。 gzip や gunzip プログラムで解凍できる、 compress や pack による他の形式の圧縮ファイルは このモジュールではサポートされていないので注意してください。

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

class `GzipFile`( | [filename[, mode[, compresslevel[, fileobj]]]])

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

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

  gzip ファイルヘッダ中には、ファイルが解凍されたときの元の ファイル名を収めることができますが、fileobj が `None` でない場合、引数 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 として渡し、（`GzipFile` を `close()` した後に） `StringIO` オブジェクトの `getvalue()` メソッドを使って 書き込んだデータの入っているメモリバッファを取得することができます。

`open`( | filename[, mode[, compresslevel]])

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

参考資料:

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