12.1. zlib — gzip 互換の圧縮 — Python 2.7ja1 documentation

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python 標準ライブラリ »
- 12. データ圧縮とアーカイブ »

# 12.1. `zlib` — gzip 互換の圧縮

このモジュールでは、データ圧縮を必要とするアプリケーションが zlib ライブラリを使って圧縮および解凍を行えるようにします。 zlib ライブラリ自体の Webページは http://www.zlib.net です。 Pythonモジュールと zlib ライブラリの1.1.3より前のバージョンには互換性のない部分があることが知られています。1.1.3にはセキュリティホールが存在しますので、1.1.4以降のバージョンを利用することをお勧めします。

zlib の関数にはたくさんのオプションがあり、しばしば特定の順番で使う必要があります。このドキュメントでは順番のことについて全てを説明し尽くそうとはしていません。信頼できる情報が必要ならば http://www.zlib.net/manual.html にある zlib のマニュアルを参照するようにしてください。

`.gz` ファイルの読み書きのためには、 `gzip` モジュールを参照してください。その他のアーカイブフォーマットについては、 `bz2`, `zipfile`, `tarfile` モジュールを参照してください。

このモジュールで利用可能な例外と関数を以下に示します:

exception `zlib.` `error`

  圧縮および解凍時のエラーによって送出される例外。

`zlib.` `adler32`(data[, value])

  data のAdler-32 チェックサムを計算します。（Adler-32 チェックサムは、おおむね CRC32 と同等の信頼性を持ちながらはるかに高速に計算することができます。） value が与えられていれば、 value はチェックサム計算の初期値として使われます。それ以外の場合には固定のデフォルト値が使われます。この機能によって、複数の入力を結合したデータ全体にわたり、通しのチェックサムを計算することができます。このアルゴリズムは暗号論的には強力とはいえないので、認証やデジタル署名などに用いるべきではありません。このアルゴリズムはチェックサムアルゴリズムとして用いるために設計されたものなので、汎用的なハッシュアルゴリズムには向きません。

  この関数は常に整数オブジェクトを返します。

ノート

全てのPythonのバージョンとプラットフォームで共通な数値を生成するには、 `adler32(data) & 0xffffffff` を利用してください。もしチェックサムをパックされたバイナリフォーマットのためにしか利用しないのであれば、符号が関係なくなり、32bitのバイナリ値としては戻り値は正しいので、この処理は必要ありません。

バージョン 2.6 で変更: 戻り値の範囲は、プラットフォームに関係なく [-2**31, 2**31-1] になりました。 古いバージョンでは、この値は幾つかのプラットフォームでは符号付き、 別のプラットフォームでは符号なしになっていました。

バージョン 3.0 で変更: 戻り値の範囲は、プラットフォームに関係なく [0, 2**32-1] です。

`zlib.` `compress`(string[, level])

  string で与えられた文字列を圧縮し、圧縮されたデータを含む文字列を返します。 level は `1` から `9` までの整数をとる値で、圧縮のレベルを制御します。 `1` は最も高速で最小限の圧縮を行います。 `9` はもっとも低速になりますが最大限の圧縮を行います。デフォルトの値は `6` です。圧縮時に何らかのエラーが発生した場合、 `error` 例外を送出します。

`zlib.` `compressobj`([level])

  一度にメモリ上に置くことができないようなデータストリームを圧縮するための圧縮オブジェクトを返します。 level は `1` から `9` までの整数で、圧縮レベルを制御します。 `1` はもっとも高速で最小限の圧縮を、 `9` はもっとも低速になりますが最大限の圧縮を行います。デフォルトの値は `6` です。

`zlib.` `crc32`(data[, value])

  data の CRC (Cyclic Redundancy Check, 巡回符号方式) チェックサムを計算します。 value が与えられていれば、チェックサム計算の初期値として使われます。与えられていなければデフォルトの初期値が使われます。 value を与えることで、複数の入力を結合したデータ全体にわたり、通しのチェックサムを計算することができます。このアルゴリズムは暗号論的には強力ではなく、認証やデジタル署名に用いるべきではありません。アルゴリズムはチェックサムアルゴリズムとして設計されているので、汎用のハッシュアルゴリズムには向きません。

  この関数は常に整数オブジェクトを返します。

ノート

全てのPythonのバージョンとプラットフォームで共通な数値を生成するには、 `crc32(data) & 0xffffffff` を利用してください。もしチェックサムをパックされたバイナリフォーマットのためにしか利用しないのであれば、符号が関係なくなり、32bitのバイナリ値としては戻り値は正しいので、この処理は必要ありません。

バージョン 2.6 で変更: 戻り値の範囲は、プラットフォームに関係なく [-2**31, 2**31-1] になりました。 古いバージョンでは、この値は幾つかのプラットフォームでは符号付き、 別のプラットフォームでは符号なしになっていました。

バージョン 3.0 で変更: 戻り値の範囲は、プラットフォームに関係なく [0, 2**32-1] です。

`zlib.` `decompress`(string[, wbits[, bufsize]])

  string 内のデータを解凍して、解凍されたデータを含む文字列を返します。 wbits パラメータはウィンドウバッファの大きさを制御します。より詳しい説明は後で行います。 bufsize が与えられていれば、出力バッファの初期サイズとして使われます。解凍処理に何らかのエラーが生じた場合、 `error` 例外を送出します。

  wbits の絶対値は、データを圧縮する際に用いられるヒストリバッファのサイズ (ウィンドウサイズ) に対し、 2 を底とする対数をとったものです。最近のほとんどのバージョンの zlib ライブラリを使っているなら、 wbits の絶対値は 8 から 15 とするべきです。より大きな値はより良好な圧縮につながりますが、より多くのメモリを必要とします。ストリームを解凍するとき、 wbits は元のストリームを圧縮するために使用したサイズより小さくしてはいけません。小さすぎる値を使用すると例外が発生します。そのため、デフォルトの値は 15 です。 wbits の値が負の場合、標準的な gzip ヘッダを出力しません。

  bufsize は解凍されたデータを保持するためのバッファサイズの初期値です。バッファの空きは必要に応じて必要なだけ増加するので、必ずしも正確な値を指定する必要はありません。この値のチューニングでできることは、 `malloc()` が呼ばれる回数を数回減らすことぐらいです。デフォルトのサイズは 16384 です。

`zlib.` `decompressobj`([wbits])

  メモリ上に一度に展開できないようなデータストリームを解凍するために用いられる解凍オブジェクトを返します。 wbits パラメータはウィンドウバッファのサイズを制御します。

圧縮オブジェクトは以下のメソッドをサポートします:

`Compress.` `compress`(string)

  string を圧縮し、圧縮されたデータを含む文字列を返します。この文字列は少なくとも string の一部分のデータに対する圧縮データを含みます。このデータは以前に呼んだ `compress()` が返した出力と結合することができます。入力の一部は以後の処理のために内部バッファに保存されることもあります。

`Compress.` `flush`([mode])

  未処理の入力データが処理され、この未処理部分を圧縮したデータを含む文字列が返されます。 mode は定数 `Z_SYNC_FLUSH` 、 `Z_FULL_FLUSH` 、または `Z_FINISH` のいずれかをとり、デフォルト値は `Z_FINISH` です。 `Z_SYNC_FLUSH` および `Z_FULL_FLUSH` ではこれ以後にもデータ文字列を圧縮できるモードです。一方、 `Z_FINISH` は圧縮ストリームを閉じ、これ以後のデータの圧縮を禁止します。 mode に `Z_FINISH` を設定して `flush()` メソッドを呼び出した後は、 `compress()` メソッドを再び呼ぶべきではありません。唯一の現実的な操作はこのオブジェクトを削除することだけです。

`Compress.` `copy`()

  圧縮オブジェクトのコピーを返します。これを使うと先頭部分が共通している複数のデータを効率的に圧縮することができます。

  バージョン 2.5 で追加.

解凍オブジェクトは以下のメソッドと 2 つの属性をサポートします:

`Decompress.` `unused_data`

  圧縮データの末尾より後のバイト列が入った文字列です。すなわち、この値は圧縮データの入っているバイト列の最後の文字が利用可能になるまでは `""` のままとなります。入力文字列全てが圧縮データを含んでいた場合、この属性は `""` 、すなわち空文字列になります。

  圧縮データ文字列がどこで終了しているかを決定する唯一の方法は、実際にそれを解凍することです。つまり、大きなファイルの一部分に圧縮データが含まれているときに、その末端を調べるためには、データをファイルから読み出し、空でない文字列を後ろに続けて、 `unused_data` が空文字列でなくなるまで、解凍オブジェクトの `decompress()` メソッドに入力しつづけるしかありません。

`Decompress.` `unconsumed_tail`

  解凍されたデータを収めるバッファの長さ制限を超えたために、最も最近の `decompress()` 呼び出しで処理しきれなかったデータを含む文字列です。このデータはまだ zlib 側からは見えていないので、正しい解凍出力を得るには以降の `decompress()` メソッド呼び出しに (場合によっては後続のデータが追加された) データを差し戻さなければなりません。

`Decompress.` `decompress`(string[, max_length])

  string を解凍し、少なくとも string の一部分に対応する解凍されたデータを含む文字列を返します。このデータは以前に `decompress()` メソッドを呼んだ時に返された出力と結合することができます。入力データの一部分が以後の処理のために内部バッファに保存されることもあります。

  オプションパラメータ max_length が与えられると、返される解凍データの長さが max_length 以下に制限されます。このことは入力した圧縮データの全てが処理されるとは限らないことを意味し、処理されなかったデータは `unconsumed_tail` 属性に保存されます。解凍処理を継続したいならば、この保存されたデータを以降の `decompress()` 呼び出しに渡さなくてはなりません。 max_length が与えられなかった場合、全ての入力が解凍され、 `unconsumed_tail` 属性は空文字列になります。

`Decompress.` `flush`([length])

  未処理の入力データを全て処理し、最終的に圧縮されなかった残りの出力文字列を返します。 `flush()` を呼んだ後、 `decompress()` を再度呼ぶべきではありません。このときできる唯一の現実的な操作はオブジェクトの削除だけです。

  オプション引数 length は出力バッファの初期サイズを決めます。

`Decompress.` `copy`()

  解凍オブジェクトのコピーを返します。これを使うとデータストリームの途中にある解凍オブジェクトの状態を保存でき、未来のある時点で行なわれるストリームのランダムなシークをスピードアップするのに利用できます。

  バージョン 2.5 で追加.

参考

Module `gzip`
  Reading and writing gzip -format files.
http://www.zlib.net
  zlib ライブラリホームページ
http://www.zlib.net/manual.html
  zlib ライブラリの多くの関数の意味と使い方を解説したマニュアル

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python 標準ライブラリ »
- 12. データ圧縮とアーカイブ »