bz2 — bzip2 圧縮のサポート
ソースコード: :source: `Lib / bz2.py`
このモジュールは、bzip2圧縮アルゴリズムを使用してデータを圧縮および解凍するための包括的なインターフェースを提供します。
bz2 モジュールには次のものが含まれています。
- 圧縮ファイルの読み取りと書き込みのための open()関数と BZ2File クラス。
- インクリメンタル(解凍)圧縮用の BZ2Compressor および BZ2Decompressor クラス。
- compress()および decompress()関数は、ワンショット(解凍)圧縮用です。
このモジュールのすべてのクラスは、複数のスレッドから安全にアクセスできます。
ファイルの(解凍)圧縮
- bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)
bzip2で圧縮されたファイルをバイナリモードまたはテキストモードで開き、ファイルオブジェクトを返します。
BZ2File のコンストラクターと同様に、 filename 引数は、実際のファイル名( str または bytes オブジェクト)または既存のファイル名にすることができます。読み取りまたは書き込みを行うファイルオブジェクト。
mode 引数には、
'r'
、'rb'
、'w'
、'wb'
、'x'
、'xb'
、'a'
、'ab'
、または'rt'
、'wt'
、'xt'
、 [X195X ]テキストモードの場合。 デフォルトは'rb'
です。compresslevel 引数は、 BZ2File コンストラクターと同様に、1から9までの整数です。
バイナリモードの場合、この関数は BZ2File コンストラクター
BZ2File(filename, mode, compresslevel=compresslevel)
と同等です。 この場合、 encoding 、 errors 、および newline 引数を指定しないでください。テキストモードの場合、 BZ2File オブジェクトが作成され、指定されたエンコーディング、エラー処理動作、および行末で io.TextIOWrapper インスタンスにラップされます。
バージョン3.3の新機能。
バージョン3.4で変更:
'x'
(排他的作成)モードが追加されました。バージョン3.6で変更: パスのようなオブジェクトを受け入れます。
- class bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)
bzip2で圧縮されたファイルをバイナリモードで開きます。
filename が str または bytes オブジェクトの場合は、指定されたファイルを直接開きます。 それ以外の場合、ファイル名はファイルオブジェクトである必要があります。これは、圧縮データの読み取りまたは書き込みに使用されます。
mode 引数は、読み取り用の
'r'
(デフォルト)、上書き用の'w'
、排他的作成用の'x'
、または'a'
のいずれかです。追加用。 これらは、それぞれ'rb'
、'wb'
、'xb'
、および'ab'
と同等に指定できます。filename が(実際のファイル名ではなく)ファイルオブジェクトである場合、
'w'
のモードはファイルを切り捨てず、代わりに'a'
と同等です。buffering 引数は無視されます。 その使用は非推奨です。
mode が
'w'
または'a'
の場合、 compresslevel は1
と9
の間の整数で、圧縮レベル:1
は最小の圧縮を生成し、9
(デフォルト)は最大の圧縮を生成します。mode が
'r'
の場合、入力ファイルは複数の圧縮ストリームを連結したものである可能性があります。BZ2File は、
detach()
とtruncate()
を除き、 io.BufferedIOBase で指定されたすべてのメンバーを提供します。 反復と with ステートメントがサポートされています。BZ2File は、次のメソッドも提供します。
- peek([n])
ファイルの位置を進めずに、バッファリングされたデータを返します。 少なくとも1バイトのデータが返されます(EOFの場合を除く)。 返される正確なバイト数は指定されていません。
ノート
peek()を呼び出しても、 BZ2File のファイル位置は変更されませんが、基になるファイルオブジェクトの位置は変更される可能性があります(例: BZ2File が filename のファイルオブジェクトを渡すことによって構築された場合)。
バージョン3.3の新機能。
バージョン3.1で変更: with ステートメントのサポートが追加されました。
バージョン3.3で変更:
fileno()
、readable()
、seekable()
、writable()
、read1()
、readinto()
メソッドが追加されました。バージョン3.3で変更:実際のファイル名ではなくファイルオブジェクトであるファイル名のサポートが追加されました。
バージョン3.3で変更:
'a'
(追加)モードが追加され、マルチストリームファイルの読み取りがサポートされました。バージョン3.4で変更:
'x'
(排他的作成)モードが追加されました。バージョン3.5で変更: read()メソッドは、
None
の引数を受け入れるようになりました。バージョン3.6で変更: パスのようなオブジェクトを受け入れます。
インクリメンタル(解凍)圧縮
- class bz2.BZ2Compressor(compresslevel=9)
新しいコンプレッサーオブジェクトを作成します。 このオブジェクトは、データを段階的に圧縮するために使用できます。 ワンショット圧縮の場合は、代わりに compress()関数を使用してください。
compresslevel は、指定されている場合、
1
と9
の間の整数である必要があります。 デフォルトは9
です。- compress(data)
コンプレッサーオブジェクトにデータを提供します。 可能であれば圧縮データのチャンクを返し、そうでない場合は空のバイト文字列を返します。
コンプレッサーへのデータの提供が終了したら、 flush()メソッドを呼び出して圧縮プロセスを終了します。
- flush()
圧縮プロセスを終了します。 内部バッファに残っている圧縮データを返します。
このメソッドが呼び出された後は、コンプレッサーオブジェクトを使用できません。
- class bz2.BZ2Decompressor
新しいデコンプレッサオブジェクトを作成します。 このオブジェクトは、データを段階的に解凍するために使用できます。 ワンショット圧縮の場合は、代わりに decompress()関数を使用してください。
ノート
このクラスは、 decompress()や BZ2File とは異なり、複数の圧縮ストリームを含む入力を透過的に処理しません。 BZ2Decompressor を使用してマルチストリーム入力を解凍する必要がある場合は、ストリームごとに新しい解凍ツールを使用する必要があります。
- decompress(data, max_length=- 1)
data ( bytes-like object )を解凍し、圧縮されていないデータをバイトとして返します。 データの一部は、後で decompress()を呼び出すときに使用するために、内部でバッファリングされる場合があります。 返されるデータは、 decompress()への以前の呼び出しの出力と連結する必要があります。
max_length が負でない場合、最大で max_length バイトの解凍されたデータを返します。 この制限に達してさらに出力を生成できる場合、 needs_input 属性は
False
に設定されます。 この場合、 decompress()を次に呼び出すと、 data がb
として提供され、より多くの出力が取得される場合があります。すべての入力データが解凍されて返された場合(これが max_length バイト未満だったため、または max_length が負だったため)、 needs_input 属性は次のようになります。
True
に設定します。ストリームの終わりに達した後にデータを解凍しようとすると、 EOFError が発生します。 ストリームの終了後に見つかったデータはすべて無視され、 unused_data 属性に保存されます。
バージョン3.5で変更: max_length パラメーターが追加されました。
- eof
True
ストリームの終わりマーカーに達した場合。バージョン3.3の新機能。
- unused_data
圧縮ストリームの終了後に見つかったデータ。
ストリームの終わりに達する前にこの属性にアクセスすると、その値は
b
になります。
- needs_input
False
decompress()メソッドが、新しい非圧縮入力を必要とする前に、より多くの解凍データを提供できる場合。バージョン3.5の新機能。
ワンショット(解凍)圧縮
- bz2.compress(data, compresslevel=9)
データ、バイトのようなオブジェクトを圧縮します。
compresslevel は、指定されている場合、
1
と9
の間の整数である必要があります。 デフォルトは9
です。インクリメンタル圧縮の場合は、代わりに BZ2Compressor を使用してください。
- bz2.decompress(data)
データ、バイトのようなオブジェクトを解凍します。
data が複数の圧縮ストリームの連結である場合は、すべてのストリームを解凍します。
増分解凍の場合は、代わりに BZ2Decompressor を使用してください。
バージョン3.3で変更:マルチストリーム入力のサポートが追加されました。
使用例
以下は、 bz2 モジュールの一般的な使用例です。
compress()および decompress()を使用して、ラウンドトリップ圧縮を示します。
増分圧縮に BZ2Compressor を使用する:
上記の例では、非常に「ランダムでない」データストリーム( b” z” チャンクのストリーム)を使用しています。 ランダムデータは圧縮率が低い傾向がありますが、順序付けられた反復データは通常、高い圧縮率をもたらします。
バイナリモードでのbzip2圧縮ファイルの書き込みと読み取り: