2013-07-30 66 views
2

我正試圖使用​​python gzip模塊將數據寫入壓縮文件。但模塊似乎並不接受壓縮壓縮級別的python gzip模塊無法正常工作

的水平我也跟着上gzip

這裏Python官方文檔中指定的語法是一個代碼示例代碼段,請糾正我,如果我錯了

import gzip 
fd = gzip.GzipFile(filename = "temp", mode = "w", compresslevel = 6) 
fd.write("some text") 

當我運行該文件的臨時文件命令我總是得到的輸出作爲「最大壓縮」,即使它不是在這種情況下

file temp 
temp: gzip compressed data, was "temp", last modified: Tue Jul 30 23:12:29 2013, max compression 
+1

漏洞修復補丁的位置:https://bugs.python.org/issue27521 - 應該很快進入python3 :) – Ddorda

回答

5

some text太小而無法測試。嘗試大字符串。

我用一個大的文本文件試了一下,它按預期工作。

import gzip 
import os 

with open('/path/to/big-file', 'rb') as f: 
    content = f.read() 

for level in range(10): 
    with gzip.GzipFile(filename='temp', mode='w', compresslevel=level) as f: 
     f.write(content) 
    print('level={}, size={}'.format(level, os.path.getsize('temp'))) 

以上代碼產生以下輸出:

level=0, size=56564 
level=1, size=21150 
level=2, size=20635 
level=3, size=20291 
level=4, size=19260 
level=5, size=18818 
level=6, size=18721 
level=7, size=18713 
level=8, size=18700 
level=9, size=18702 
+1

+1。很可能''gzip'模塊根本就沒有將壓縮級別寫入頭文件或類似文件,但是由於該代碼塊主要輸出魔法值,所以我不確定這是在哪裏完成的。 – zigg

+0

for循環不應該在第一個'with'下縮進,以便內容在範圍內? –

+0

@nueverest,在'with'語句之外可以使用'content'。我有意儘快關閉文件。 – falsetru

0

元數據可能不正確,但壓縮級別設置不正常工作。

[email protected]:/tmp$ python z.py <-- level 6 
[email protected]:/tmp$ ll temp 
-rw-rw-r-- 1 dhruv dhruv 215903 Jul 30 23:36 temp 
[email protected]:/tmp$ fg 
emacs -nw z.py 
[email protected]:/tmp$ python z.py <--- level 9 
[email protected]:/tmp$ ll temp 
-rw-rw-r-- 1 dhruv dhruv 215723 Jul 30 23:36 temp 

內容z.py的:

import gzip 
fd = gzip.GzipFile(filename = "temp", mode = "w", compresslevel = 9) 
for i in range(0,100000): 
    fd.write(str(i))