2011-11-23 55 views
1

我想壓縮數據流使用pythons bz2compressor類。Python BZ2壓縮 - 壓縮()​​不返回任何東西

文檔說bz2compressor.compress()應該返回壓縮數據的塊「只要有可能」,但我沒有得到任何

我讓我所有的壓縮數據時,我flush()(我曾嘗試與文件2GB +)仍然一無所獲。

有沒有一種方法可以設置任何內部緩衝區限制,以便它能夠返回我的數據。

謝謝!

+0

「當我flush()(我曾嘗試使用2GB +文件)時,我得到了所有壓縮數據。」?這是什麼意思?你有沖洗的數據嗎?如果是這樣,那麼你的問題是什麼?你想知道爲什麼它似乎沒有實際返回塊? –

+0

嗨,是的,我想從bz2compressor.compress()(文檔說這個函數應該返回卡盤)的小塊。 –

+0

它不是*必需*返回塊。看起來,實施並不需要。看起來你有辦法,在你的計算機內存太多內存。 –

回答

2

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

當我使用真正的隨機數據時,我得到塊。