## 1 ファイルの圧縮（解凍）

`BZ2File` クラスは圧縮ファイルの操作機能を提供しています。

クラス `BZ2File`( | filename[, mode[, buffering[, compresslevel]]])

  bz2 ファイルを開きます。ファイルのモードは `'r'` または `'w'` で、それぞれ読み出しと書き込みに対応します。 書き出し用に開いた場合、ファイルが存在しないなら新しく作成し、 そうでない場合ファイルを切り詰ます。 buffering パラメタを与えた場合、`0` はバッファリング なしを表し、それよりも大きい値はバッファサイズになります。 デフォルトでは `0` です。圧縮レベルcompresslevel を与える場合、値は `1` から `9` までの整数値でなければ なりません。デフォルトの値は `9` です。 ファイルへの入力に広範囲の改行文字バリエーションをサポートさせたい 場合は "`U`" をファイルモードに追加します。 入力ファイルの行末はどれも、Pythonからは "`\n`" として見えます。 また、また、開かれているファイルオブジェクトは `newlines` 属性 を持ち、`None` (まだ改行文字を読み込んでいない時), `'\r'`, `'\n'`, `'\r\n'` または全ての改行文字バリエーション を含むタプルになります。広範囲の改行文字サポートが利用できるのは 読み込みだけです。`BZ2File` が生成するインスタンスは通常の ファイルインスタンスと同様のイテレーション操作をサポートしています。

`close`( | )

  ファイルを閉じます。オブジェクトのデータ属性 `closed` を真に します。閉じたファイルはそれ以後入出力操作の対象にできません。 `close()` 自体の呼び出しはエラーを引き起こすことなく何度も 実行できます。

`read`( | [size])

  最大で size バイトの解凍されたデータを読み出し、文字列として 返します。size 引数を負の値にした場合や省略した場合、EOF に たどり着くまで読み出します。

`readline`( | [size])

  ファイルから次の 1 行を読み出し、改行文字も含めて文字列を返します。 負でない size 値は、返される文字列の最大バイト長を制限します (その場合不完全な行を返すこともあります)。 EOF の時には空文字列 を返します。

`readlines`( | [size])

  ファイルから読み取った各行の文字列からなるリストを返します。 オプション引数 size を与えた場合、文字列リストの 合計バイト長の大まかな上限の指定になります。

`xreadlines`( | )

  前のバージョンとの互換性のために用意されています。 `BZ2File` オブジェクトはかつて `xreadlines` モジュールで提供されて いたパフォーマンス最適化を含んでいます。
  リリース 2.3 で撤廃されました。 このメソッドは `file` オブジェクトの同名の メソッドとの互換性のために用意されていますが、現在は推奨されない メソッドです。代りに `for line in file` を使ってください。

`seek`( | offset[, whence])

  ファイルの読み書き位置を移動します。 引数 offset はバイト数で 指定したオフセット値です。 オプション引数 whence はデフォルトで `0` (ファイルの 先頭からのオフセットで、offset `>= 0` になるはず) です。 他にとり得る値は `1` (現在のファイル位置からの相対位置で、正負 どちらの値もとり得る)、および `2` (ファイルの終末端からの相対位置で、 通常は負の値になるが、多くのプラットフォームではファイルの終末端を 越えて seek できる) です。

  bz2 ファイルの seek はエミュレーションであり、パラメタの設定によっては 処理が非常に低速になるかもしれないので注意してください。

`tell`( | )

  現在のファイル位置を整数（long 整数になるかもしれません）で返します。

`write`( | data)

  ファイルに文字列 data を書き込みます。バッファリングのため、 ディスク上のファイルに書き込まれたデータを反映させるには `close()` が必要になるかもしれないので注意してください。

`writelines`( | sequence_of_strings)

  複数の文字列からなるシーケンスをファイルに書き込みます。それぞれの 文字列を書き込む際に改行文字を追加することはありません。 シーケンスはイテレーション処理で文字列を取り出せる任意のオブジェクトに できます。この操作はそれぞれの文字列を write() を呼んで 書き込むのと同じ操作です。