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

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

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

バージョン3.0で変更:常に符号なしの値を返します。 すべてのPythonバージョンとプラットフォームで同じ数値を生成するには、adler32(data) & 0xffffffffを使用します。

zlib.compress(data, level=- 1)

data のバイトを圧縮し、圧縮データを含むバイトオブジェクトを返します。 level は、0から9または-1までの整数で、圧縮レベルを制御します。 1(Z_BEST_SPEED)は最も速く、最小の圧縮を生成します。9(Z_BEST_COMPRESSION)は最も遅く、最大の圧縮を生成します。 0(Z_NO_COMPRESSION)は圧縮されていません。 デフォルト値は-1(Z_DEFAULT_COMPRESSION)です。 Z_DEFAULT_COMPRESSIONは、速度と圧縮の間のデフォルトの妥協点を表します(現在はレベル6と同等)。 エラーが発生した場合、エラー例外を発生させます。

バージョン3.6で変更: level をキーワードパラメーターとして使用できるようになりました。

zlib.compressobj(level=-1, method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=Z_DEFAULT_STRATEGY[, zdict])

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

level は圧縮レベルであり、0から9または-1までの整数です。 1(Z_BEST_SPEED)の値は最も速く、最小の圧縮を生成しますが、9(Z_BEST_COMPRESSION)の値は最も遅く、最大の圧縮を生成します。 0(Z_NO_COMPRESSION)は圧縮されていません。 デフォルト値は-1(Z_DEFAULT_COMPRESSION)です。 Z_DEFAULT_COMPRESSIONは、速度と圧縮の間のデフォルトの妥協点を表します(現在はレベル6と同等)。

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

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

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

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

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

memLevel 引数は、内部圧縮状態に使用されるメモリの量を制御します。 有効な値の範囲は1から9です。 値を大きくすると、より多くのメモリが使用されますが、速度が速くなり、出力が小さくなります。

strategy は、圧縮アルゴリズムを調整するために使用されます。 可能な値は、Z_DEFAULT_STRATEGYZ_FILTEREDZ_HUFFMAN_ONLYZ_RLE(zlib 1.2.0.1)、およびZ_FIXED(zlib 1.2.2.2)です。

zdict は、事前定義された圧縮辞書です。 これは、圧縮されるデータで頻繁に発生すると予想されるサブシーケンスを含むバイトのシーケンス( bytes オブジェクトなど)です。 最も一般的であると予想されるこれらのサブシーケンスは、辞書の最後に来る必要があります。

バージョン3.3で変更: zdict パラメーターとキーワード引数のサポートが追加されました。

zlib.crc32(data[, value])

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

バージョン3.0で変更:常に符号なしの値を返します。 すべてのPythonバージョンとプラットフォームで同じ数値を生成するには、crc32(data) & 0xffffffffを使用します。

zlib.decompress(data, wbits=MAX_WBITS, bufsize=DEF_BUF_SIZE)

data のバイトを解凍し、圧縮されていないデータを含むバイトオブジェクトを返します。 wbits パラメーターは、 data の形式に依存します。これについては、以下で詳しく説明します。 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 値は最大ウィンドウサイズに対応し、zlibヘッダーとトレーラーを含める必要があります。

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

バージョン3.6で変更: wbits および bufsize をキーワード引数として使用できます。

zlib.decompressobj(wbits=MAX_WBITS[, zdict])

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

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

zdict パラメーターは、事前定義された圧縮辞書を指定します。 提供されている場合、これは、解凍されるデータを生成したコンプレッサーによって使用されたものと同じディクショナリである必要があります。

ノート

zdict が可変オブジェクト( bytearray など)の場合、 decompressobj()の呼び出しと最初の呼び出しの間にその内容を変更してはなりません。デコンプレッサのdecompress()メソッド。

バージョン3.3で変更: zdict パラメーターが追加されました。

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

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

バージョン3.8で変更:圧縮オブジェクトに copy.copy()および copy.deepcopy()のサポートが追加されました。


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

Decompress.unused_data
圧縮データの終わりを超えたバイトを含むbytesオブジェクト。 つまり、これは、圧縮データを含む最後のバイトが使用可能になるまでb""のままです。 バイト文字列全体に圧縮データが含まれていることが判明した場合、これはb""、空のバイトオブジェクトです。
Decompress.unconsumed_tail
非圧縮データバッファの制限を超えたために最後の decompress()呼び出しによって消費されなかったデータを含むbytesオブジェクト。 このデータはzlib機構によってまだ表示されていないため、正しい出力を取得するには、後続の decompress()メソッド呼び出しにデータをフィードバックする必要があります(場合によってはさらにデータを連結して)。
Decompress.eof

圧縮されたデータストリームの終わりに到達したかどうかを示すブール値。

これにより、適切に形成された圧縮ストリームと、不完全または切り捨てられたストリームを区別できます。

バージョン3.3の新機能。

Decompress.decompress(data, max_length=0)

data を解凍し、 string のデータの少なくとも一部に対応する非圧縮データを含むbytesオブジェクトを返します。 このデータは、 decompress()メソッドへの先行する呼び出しによって生成された出力に連結する必要があります。 一部の入力データは、後で処理するために内部バッファーに保存される場合があります。

オプションのパラメータ max_length がゼロ以外の場合、戻り値は max_length 以下になります。 これは、圧縮された入力のすべてを処理できるわけではないことを意味する場合があります。 消費されていないデータは、属性 unconsumed_tail に格納されます。 解凍を続行する場合は、このバイト文字列を decompress()の後続の呼び出しに渡す必要があります。 max_length がゼロの場合、入力全体が解凍され、 unconsumed_tail は空になります。

バージョン3.6で変更: max_length をキーワード引数として使用できます。

Decompress.flush([length])

保留中のすべての入力が処理され、残りの非圧縮出力を含むバイトオブジェクトが返されます。 flush()を呼び出した後、 decompress()メソッドを再度呼び出すことはできません。 唯一の現実的なアクションは、オブジェクトを削除することです。

オプションのパラメータ length は、出力バッファの初期サイズを設定します。

Decompress.copy()
解凍オブジェクトのコピーを返します。 これを使用して、データストリームの途中でデコンプレッサの状態を保存し、将来の時点でストリームへのランダムシークを高速化できます。

バージョン3.8で変更:解凍オブジェクトに copy.copy()および copy.deepcopy()のサポートが追加されました。


使用中のzlibライブラリのバージョンに関する情報は、次の定数から入手できます。

zlib.ZLIB_VERSION
モジュールのビルドに使用されたzlibライブラリのバージョン文字列。 これは、実行時に実際に使用される ZLIB_RUNTIME_VERSION として利用可能なzlibライブラリとは異なる場合があります。
zlib.ZLIB_RUNTIME_VERSION

インタプリタによって実際にロードされたzlibライブラリのバージョン文字列。

バージョン3.3の新機能。

も参照してください

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