Python BZ2 Compressor - compress()没有返回任何东西

时间:2011-11-23 17:48:12

标签: python stream buffer compression bzip2

我正在尝试使用pythons bz2compressor类压缩数据流。

文档说bz2compressor.compress()应该“尽可能”返回压缩数据块但是我没有得到任何东西

当我flush()(我尝试使用2GB +文件)时,我得到了所有压缩数据。

有没有办法可以将内部缓冲区限制设置为何时返回数据。

谢谢!

1 个答案:

答案 0 :(得分: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

当我使用真正的随机数据时,我得到了块。