12.1. zlib — gzipと互換性のある圧縮—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/zlib
移動先:案内検索

12.1。 zlib —圧縮と互換性があります gzip

データ圧縮を必要とするアプリケーションの場合、このモジュールの関数は、zlibライブラリを使用して圧縮と解凍を可能にします。 zlibライブラリには、 http://www.zlib.net に独自のホームページがあります。 Pythonモジュールと1.1.3より前のバージョンのzlibライブラリの間には既知の非互換性があります。 1.1.3にはセキュリティの脆弱性があるため、1.1.4以降を使用することをお勧めします。

zlibの関数には多くのオプションがあり、特定の順序で使用する必要があることがよくあります。 このドキュメントは、すべての順列を網羅しようとしているわけではありません。 信頼できる情報については、 http://www.zlib.net/manual.htmlのzlibマニュアルを参照してください。

.gzファイルの読み取りと書き込みについては、 gzip モジュールを参照してください。

このモジュールで使用可能な例外と機能は次のとおりです。

exception zlib.error
圧縮および解凍エラーで例外が発生しました。
zlib.adler32(data[, value])

データのAdler-32チェックサムを計算します。 (Adler-32チェックサムはCRC32とほぼ同じくらい信頼性がありますが、はるかに高速に計算できます。) value が存在する場合、チェックサムの開始値として使用されます。 それ以外の場合は、固定のデフォルト値が使用されます。 これにより、複数の入力を連結して実行中のチェックサムを計算できます。 このアルゴリズムは暗号的に強力ではないため、認証やデジタル署名には使用しないでください。 このアルゴリズムはチェックサムアルゴリズムとして使用するように設計されているため、一般的なハッシュアルゴリズムとしての使用には適していません。

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

ノート

すべてのPythonバージョンとプラットフォームで同じ数値を生成するには、adler32(data)&0xffffffffを使用します。 パックされたバイナリ形式のチェックサムのみを使用している場合、戻り値は符号に関係なく正しい32ビットのバイナリ表現であるため、これは必要ありません。


バージョン2.6で変更:プラットフォームに関係なく、戻り値は[-2 ** 31、2 ** 31-1]の範囲にあります。 古いバージョンでは、値は一部のプラットフォームで署名され、他のプラットフォームでは署名されていません。


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


zlib.compress(string[, level])
string のデータを圧縮し、圧縮されたデータを含む文字列を返します。 level は、0から9までの整数で、圧縮のレベルを制御します。 1は最も速く、最小の圧縮を生成し、9は最も遅く、最大の圧縮を生成します。 0は圧縮なしです。 デフォルト値は6です。 エラーが発生した場合、エラー例外を発生させます。
zlib.compressobj([level[, method[, wbits[, memlevel[, strategy]]]]])

一度にメモリに収まらないデータストリームを圧縮するために使用される圧縮オブジェクトを返します。 level は、0から9または-1までの整数で、圧縮のレベルを制御します。 1は最も速く、最小の圧縮を生成し、9は最も遅く、最大の圧縮を生成します。 0は圧縮なしです。 デフォルト値は-1(Z_DEFAULT_COMPRESSION)です。 Z_DEFAULT_COMPRESSIONは、速度と圧縮の間のデフォルトの妥協点を表します(現在はレベル6と同等)。

method は圧縮アルゴリズムです。 現在、サポートされている値はDEFLATEDのみです。

wbits 引数は、データの圧縮時に使用される履歴バッファーのサイズ(または「ウィンドウサイズ」)、およびヘッダーとトレーラーが出力に含まれるかどうかを制御します。 いくつかの値の範囲を取ることができます。 デフォルトは15です。

  • + 9〜 + 15:ウィンドウサイズの基数2の対数。したがって、512〜32768の範囲です。 値を大きくすると、メモリ使用量が増える代わりに、圧縮率が向上します。 結果の出力には、zlib固有のヘッダーとトレーラーが含まれます。

  • −9〜−15: wbits の絶対値をウィンドウサイズの対数として使用し、ヘッダーまたは末尾のチェックサムのない生の出力ストリームを生成します。

  • + 25〜 + 31 = 16 +(9〜15):基本的な gzip ヘッダーと末尾のチェックサムを出力に含めながら、値の下位4ビットをウィンドウサイズの対数として使用します。

memlevel は、内部圧縮状態に使用されるメモリの量を制御します。 有効な値の範囲は1から9です。 より多くのメモリを使用して値を大きくしますが、より高速で出力が小さくなります。 デフォルトは8です。

strategy は、圧縮アルゴリズムを調整するために使用されます。 可能な値は、Z_DEFAULT_STRATEGYZ_FILTERED、およびZ_HUFFMAN_ONLYです。 デフォルトはZ_DEFAULT_STRATEGYです。

zlib.crc32(data[, value])

データのCRC(巡回冗長検査)チェックサムを計算します。 value が存在する場合、チェックサムの開始値として使用されます。 それ以外の場合は、固定のデフォルト値が使用されます。 これにより、複数の入力を連結して実行中のチェックサムを計算できます。 このアルゴリズムは暗号的に強力ではないため、認証やデジタル署名には使用しないでください。 このアルゴリズムはチェックサムアルゴリズムとして使用するように設計されているため、一般的なハッシュアルゴリズムとしての使用には適していません。

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

ノート

すべてのPythonバージョンとプラットフォームで同じ数値を生成するには、crc32(data)&0xffffffffを使用します。 パックされたバイナリ形式のチェックサムのみを使用している場合、戻り値は符号に関係なく正しい32ビットのバイナリ表現であるため、これは必要ありません。


バージョン2.6で変更:プラットフォームに関係なく、戻り値は[-2 ** 31、2 ** 31-1]の範囲にあります。 古いバージョンでは、値は一部のプラットフォームでは署名され、他のプラットフォームでは署名されていませんでした。


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


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

string のデータを解凍し、圧縮されていないデータを含む文字列を返します。 wbits パラメーターは、 string の形式に依存します。これについては、以下で詳しく説明します。 bufsize を指定すると、出力バッファーの初期サイズとして使用されます。 エラーが発生した場合、エラー例外を発生させます。

wbits パラメーターは、履歴バッファーのサイズ(または「ウィンドウサイズ」)、および予想されるヘッダーとトレーラーの形式を制御します。 compressobj()のパラメーターに似ていますが、より多くの値の範囲を受け入れます。

  • + 8〜 + 15:ウィンドウサイズの基数2の対数。 入力には、zlibヘッダーとトレーラーが含まれている必要があります。

  • 0:zlibヘッダーからウィンドウサイズを自動的に決定します。 zlib1.2.3.5以降でのみサポートされます。

  • −8〜−15:ウィンドウサイズの対数として wbits の絶対値を使用します。 入力は、ヘッダーまたはトレーラーのない生のストリームである必要があります。

  • + 24〜 + 31 = 16 +(8〜15):値の下位4ビットをウィンドウサイズの対数として使用します。 入力には、gzipヘッダーとトレーラーが含まれている必要があります。

  • + 40〜 + 47 = 32 +(8〜15):値の下位4ビットをウィンドウサイズの対数として使用し、zlibまたはgzip形式のいずれかを自動的に受け入れます。

ストリームを解凍する場合、ウィンドウサイズは、ストリームの圧縮に最初に使用されたサイズより小さくてはなりません。 小さすぎる値を使用すると、エラー例外が発生する可能性があります。 デフォルトの wbits 値は15です。これは最大ウィンドウサイズに対応し、zlibヘッダーとトレーラーを含める必要があります。

bufsize は、解凍されたデータを保持するために使用されるバッファーの初期サイズです。 より多くのスペースが必要な場合は、必要に応じてバッファーサイズが増加するため、この値を正確に取得する必要はありません。 チューニングすると、malloc()への呼び出しが数回しか保存されません。 デフォルトのサイズは16384です。

zlib.decompressobj([wbits])

一度にメモリに収まらないデータストリームを解凍するために使用される解凍オブジェクトを返します。

wbits パラメーターは、履歴バッファーのサイズ(または「ウィンドウサイズ」)、および予想されるヘッダーとトレーラーの形式を制御します。 これは、decompress()で説明されていると同じ意味です。

圧縮オブジェクトは、次のメソッドをサポートします。

Compress.compress(string)
string を圧縮し、 string のデータの少なくとも一部の圧縮データを含む文字列を返します。 このデータは、 compress()メソッドへの先行する呼び出しによって生成された出力に連結する必要があります。 一部の入力は、後で処理するために内部バッファに保持される場合があります。
Compress.flush([mode])
保留中のすべての入力が処理され、残りの圧縮出力を含む文字列が返されます。 モードは、定数Z_SYNC_FLUSHZ_FULL_FLUSH、またはZ_FINISHから選択でき、デフォルトはZ_FINISHです。 Z_SYNC_FLUSHおよびZ_FULL_FLUSHを使用すると、さらにデータ文字列を圧縮できますが、Z_FINISHは圧縮ストリームを終了し、それ以上のデータの圧縮を防ぎます。 modeZ_FINISHに設定して flush()を呼び出した後、 compress()メソッドを再度呼び出すことはできません。 唯一の現実的なアクションは、オブジェクトを削除することです。
Compress.copy()

圧縮オブジェクトのコピーを返します。 これは、共通の初期プレフィックスを共有するデータのセットを効率的に圧縮するために使用できます。

バージョン2.5の新機能。

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

Decompress.unused_data

圧縮データの終わりを超えたバイトを含む文字列。 つまり、これは、圧縮データを含む最後のバイトが使用可能になるまで""のままです。 文字列全体に圧縮データが含まれていることが判明した場合、これは""、つまり空の文字列です。

圧縮されたデータの文字列がどこで終了するかを判断する唯一の方法は、実際にデータを解凍することです。 つまり、圧縮されたデータが大きなファイルの一部に含まれている場合、データを読み取り、そのデータに続いて空でない文字列を解凍オブジェクトの decompress()メソッドに入力することによってのみ、データの終わりを見つけることができます。 unused_data 属性は空の文字列ではなくなりました。

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の新機能。

も参照してください

モジュール gzip
gzip 形式のファイルの読み取りと書き込み。
http://www.zlib.net
zlibライブラリのホームページ。
http://www.zlib.net/manual.html
zlibマニュアルでは、ライブラリの多くの関数のセマンティクスと使用法について説明しています。