我正在尝试使用 pythons bz2compressor 类压缩数据流。
文档说bz2compressor.compress()
应该“尽可能”返回压缩数据块,但我什么也没得到
flush()
当我(我尝试过使用 2GB+ 的文件)仍然一无所获时,我得到了所有的压缩数据。
有没有办法可以将任何内部缓冲区限制设置为何时应该返回数据。
谢谢!
我正在尝试使用 pythons bz2compressor 类压缩数据流。
文档说bz2compressor.compress()
应该“尽可能”返回压缩数据块,但我什么也没得到
flush()
当我(我尝试过使用 2GB+ 的文件)仍然一无所获时,我得到了所有的压缩数据。
有没有办法可以将任何内部缓冲区限制设置为何时应该返回数据。
谢谢!
当我刷新()(我尝试过使用 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
当我使用真正随机的数据时,我会得到块。