13.3. bz2 — bzip2 圧縮のサポート¶
ソースコード: Lib/bz2.py
このモジュールは、bzip2 アルゴリズムを用いて圧縮・展開を行う包括的なインターフェイスを提供します。
bz2 モジュールには以下のクラスや関数があります:
インクリメンタルにデータを圧縮・展開するための
BZ2CompressorおよびBZ2Decompressorクラス。一度に圧縮・展開を行う
compress()およびdecompress()関数。
このモジュールのクラスはすべて、複数のスレッドから安全にアクセスできます。
13.3.1. ファイルの圧縮および展開¶
-
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'、あるいは'at'を指定できます。デフォルトは'rb'です。引数 compresslevel には
BZ2Fileコンストラクタと同様に 1 から 9 の整数を指定します。バイナリモードでは、この関数は
BZ2FileコンストラクタBZ2File(filename, mode, compresslevel=compresslevel)と等価です。この時、引数 encoding、errors、および newline を指定してはいけません。テキストモードでは、
BZ2Fileオブジェクトが作成され、指定されたエンコーディング、エラーハンドラの挙動、および改行文字でio.TextIOWrapperにラップされます。バージョン 3.3 で追加.
バージョン 3.4 で変更:
'x'(排他的作成) モードが追加されました。
-
class
bz2.BZ2File(filename, mode='r', buffering=None, compresslevel=9)¶ bzip2 圧縮ファイルをバイナリモードでオープンします。
filename が
strあるいはbytesオブジェクトの場合、それを名前とするファイルを直接開きます。そうでない場合、filename は圧縮データを読み書きする ファイルオブジェクト でなくてはなりません。引数 mode は読み込みモードの
'r'(デフォルト)、上書きモードの'w'、排他的作成モードの'x'、あるいは追記モードの'a'のいずれかを指定できます。これらはそれぞれ'rb'、'wb'、'xb'および'ab'と等価です。filename が (実際のファイル名でなく) ファイルオブジェクトの場合、
'w'はファイルを上書きせず、'a'と等価になります。引数 buffering は無視されます。この引数の使用は非推奨です。
mode が
'w'あるいは'a'の場合、compresslevel に圧縮レベルを1から9の整数で指定できます。圧縮率は1が最低で、9(デフォルト値) が最高です。mode の値が
'r'の場合、入力ファイルは複数の圧縮ストリームでも構いません。BZ2Fileには、io.BufferedIOBaseで規定されているメソッドや属性のうち、detach()とtruncate()を除くすべてが備わっています。イテレーションとwith文をサポートしています。BZ2Fileは以下のメソッドも提供しています:-
peek([n])¶ ファイル上の現在位置を変更せずにバッファのデータを返します。このメソッドは少なくとも 1 バイトのデータを返します (EOF の場合を除く)。返される正確なバイト数は規定されていません。
注釈
peek()の呼び出しではBZ2Fileのファイル位置は変わりませんが、下層のファイルオブジェクトの位置が変わる惧れがあります(e.g.BZ2Fileを filename にファイルオブジェクトを渡して作成した場合)。バージョン 3.3 で追加.
バージョン 3.1 で変更:
with文をサポートしました。バージョン 3.3 で変更:
fileno()、readable()、seekable()、writable()、read1()、readinto()メソッドが追加されました。バージョン 3.3 で変更: filename が実際のファイル名でなく ファイルオブジェクト だった場合のサポートが追加されました。
バージョン 3.3 で変更:
'a'(追記) モードが追加され、複数のストリームの読み込みがサポートされました。バージョン 3.4 で変更:
'x'(排他的作成) モードが追加されました。バージョン 3.5 で変更:
read()メソッドがNoneを引数として受け取るようになりました。-
13.3.2. 逐次圧縮および展開¶
-
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 で返します。 data の一部は、後で
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¶ decompress()メソッドが、新しい非圧縮入力を必要とせずにさらに展開データを提供できる場合、Falseです。バージョン 3.5 で追加.
-
13.3.3. 一度にファイルを圧縮・展開する¶
-
bz2.compress(data, compresslevel=9)¶ data を圧縮します。
引数 compresslevel を指定する場合は、
1から9までの数字を与えてください。デフォルト値は9です。逐次的にデータを圧縮したい場合は、
BZ2Compressorを使ってください。
-
bz2.decompress(data)¶ data を展開します。
data が複数の圧縮ストリームから成る場合、そのすべてを展開します。
逐次的に展開を行う場合は、
BZ2Decompressorを使ってください。バージョン 3.3 で変更: 複数ストリームの入力をサポートしました。
