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

文档说bz2compressor.compress()应该“尽可能”返回压缩数据块,但我什么也没得到

当我flush()(我尝试使用2GB以上的文件)时,仍然没有获得所有压缩数据。

有没有一种方法可以设置任何内部缓冲区限制,以使其何时返回我的数据。

谢谢!

最佳答案

当我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


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

关于python - Python BZ2 Compressor-compress()不返回任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8246769/

10-12 01:42
查看更多