Pythonのgzipと互換性のある圧縮(zlib)
zlibモジュールは、GNUプロジェクトの一部であるZlib圧縮ライブラリ(https://www.zlib.net)のPython実装を提供します。
この記事では、zlibモジュールで定義されている重要な関数について説明します。
compress()
この関数は、decompress()関数とともにこのモジュールへの主要なインターフェースです。この関数は、パラメータとして与えられたデータを圧縮することにより、バイトオブジェクトを返します。この関数には、圧縮の範囲を制御するlevelと呼ばれる別のパラメーターがあります。これは0から9までの整数です。最小値の0は圧縮なしを表し、9は最高の圧縮を表します。圧縮レベルが高いほど、圧縮されたバイトオブジェクトの長さが長くなります。
decompress()
この関数は、compress()関数の反対を行います。非圧縮データを取得します。この関数には、履歴バッファーのサイズとヘッダーおよびトレーラー形式の性質を制御するwbitsと呼ばれるオプションのパラメーターを含めることができます。
次のステートメントは、compress()関数を使用して文字列オブジェクトを圧縮します
>>> import zlib >>> c = zlib.compress(b'hello python') >>> c b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'
一方、decompress()関数は元のPython文字列を取得します。
>>> zlib.decompress(c) b'hello python'
このモジュールは、圧縮オブジェクトと解凍オブジェクトの2つの対応するクラスの定義で構成されています。
compressobj() −このコンストラクターは、データストリームの圧縮に使用される圧縮オブジェクトを返します。このオブジェクトの2つの重要なメソッドは
です。compress() −圧縮されたバイトオブジェクトを返します。
flush() −圧縮オブジェクトはストリームを処理するため、一部の圧縮データがバッファに残っている可能性があります。このメソッドはバッファを空にします。
次の例では、圧縮オブジェクトを設定し、フラッシュされたデータをcompress()メソッドの戻り値に追加して圧縮データオブジェクトを作成します。
>>> s1 = b'hello python' >>> c = zlib.compressobj() >>> s2 = c.compress(s1) >>> s2 = s2+c.flush() >>> s2 b'x\x9c\xcbH\xcd\xc9\xc9W(\xa8,\xc9\xc8\xcf\x03\x00\x1e\xf0\x04\xd7'
decompressobj() −これは、ストリームから大きなデータを解凍する解凍オブジェクトのコンストラクターとして機能します。このオブジェクトは、次のメソッドを提供します
decompress() −このメソッドは非圧縮データを返します
flush() −このメソッドはバッファを空にします。
次のコードは、前の例で作成されたバイトオブジェクトから非圧縮データを取得します
>>> d = zlib.decompressobj() >>> x = d.decompress(s2) >>> x = x+d.flush() >>> x b'hello python'
使用中のzlibライブラリのバージョン情報を提供する2つの定数がzlibモジュールで定義されています。
>>> zlib.ZLIB_VERSION '1.2.11' >>> zlib.ZLIB_RUNTIME_VERSION '1.2.11'
-
Pythonの弱参照
Pythonで弱参照を作成するには、弱参照を使用する必要があります モジュール。 weakrefは、オブジェクトを存続させるのに十分ではありません。弱参照の基本的な使用法は、大きなオブジェクトのキャッシュまたはマッピングを実装することです。 このモジュールを使用するには、-を使用してインポートする必要があります import weakref すべてのオブジェクトを弱く参照できるわけではありません。 tupleやintなどの一部の組み込み型は、弱参照をサポートしていません。弱参照に関連するクラスとメソッドがいくつかあります。 クラスweakref.ref(object [、callbac
-
PythonのTimeTupleとは何ですか?
datetime.dateインスタンスのtimetuple()メソッドは、time.struct_time型のオブジェクトを返します。 struct_timeは名前付きタプルオブジェクトです(名前付きタプルオブジェクトには、インデックスまたは名前でアクセスできる属性があります)。 struct_timeオブジェクトには、日付フィールドと時刻フィールドの両方を表す属性と、夏時間がアクティブかどうかを示すフラグがあります。 timetuple()関数によって返される名前付きタプルでは、日付オブジェクトに従って年、月、日のフィールドが設定され、時間、分、秒に対応するフィールドはゼロに設定され