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