2

pythons bz2compressor クラスを使用してデータ ストリームを圧縮しようとしています。

ドキュメントにはbz2compressor.compress()、「可能な限り」圧縮データのチャンクを返す必要があると書かれていますが、何も得られません

flush()(2GB以上のファイルで試しましたが)まだ何もないときに、すべての圧縮データを取得します。

データを返す必要があるときに内部バッファ制限を設定する方法はありますか?

ありがとう!

4

1 に答える 1

3

flush() すると、すべての圧縮データが取得されます(2GB以上のファイルで試しました)まだ何もありません。

コンプレッサーの操作にはコツがあります。

あなたの2GB以上のファイルはあまりランダムではなかったに違いありません。ランダム データはうまく圧縮されません。整然としたデータは非常に小さいサイズに圧縮されます。

例えば

>>> import bz2
>>> c=bz2.BZ2Compressor()
>>> import string
>>> data = string.printable*1024
>>> len(data)
102400
>>> c.compress(data)
''
>>> result= c.flush()
>>> len(result)
361

提供されたデータにはパターンがあり、それにより圧縮がうまくいきました。

ランダムデータが必要です。

>>> import random
>>> c=bz2.BZ2Compressor()
>>> size= 0
>>> result= ''
>>> while result == '':
...     data = ''.join( random.choice(string.printable) for i in xrange(1024*8) )
...     size += len(data)
...     result= c.compress(data)... 
>>> len(result)
754809
>>> size
901120

本当にランダムなデータを使用すると、チャンクが発生します。

于 2011-12-07T18:35:37.660 に答える