]追加された行はこの色です。削除された行はこの色です。bz2というものがあります。簡単に言うと複数のBZ2が合わさったもので、私が知っている限りではbzip2のマルチスレッド対応版であるpbzip2で生成されます。このpbzip2はマルチスレッドで処理するために圧縮、展開がかなり速くなるのですが、現在のPythonのbz2.BZ2Fileではそのままでは展開できず、一部のみの展開になってしまいます(展開後ファイルサイズ900k以上のもの)。pbunzip2またはbunzip2を使えば何の問題もないのですが、bz2モジュールでの展開を試みてみたのでメモします。遠くない将来にはPythonでも対応しそうです(たぶん)。3用のパッチは提供されていますが、2.x用はないようです。書いてあるので、将来的には2.xにも提供されるかも。2.5用のを公開してくれていれば助かったのですが。書きましたが、大して難しくないです。bz2とは以下のような形式です。いうようにBZ2のパートがつながっているだけのものです。pbzip2ディフォルトでは900kbytes(まさに900000bytes)ごとに分けて圧縮されるようです。bz2モジュールのBZ2Fileではなく、BZ2Decompressorを使います。BZ2Decompressorオブジェクトを生成し、decompressメソッドに内容を渡すと、展開されなかった残りの部分(次のBZ2パート以降)がunused_dataにセットされるのでそれをさらにdecompressし・・・という事を繰り返します。pbunzip2が使用できるならその方が圧倒的に速いのですが、bunzip2とはほぼ同じ速度なので外部プログラムに頼りたくない時はいいかもしれません。~ちょっと凝ったことをすればマルチスレッドでも可能だと思いますが、GILのためCPUパワーを有効活用ができないのでシングルスレッド処理で実装しています。マルチコアで処理をするにはCでモジュールを書かないとダメかも(そこまでするならpbunzip2を使うかな・・・)。