5

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
4

2 に答える 2

6

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
于 2013-07-30T18:07:01.550 に答える
0

メタデータが正しくない可能性がありますが、圧縮レベルの設定は正しく機能します。

dhruv@dhruv:/tmp$ python z.py <-- level 6
dhruv@dhruv:/tmp$ ll temp 
-rw-rw-r-- 1 dhruv dhruv 215903 Jul 30 23:36 temp
dhruv@dhruv:/tmp$ fg
emacs -nw z.py
dhruv@dhruv:/tmp$ python z.py  <--- level 9 
dhruv@dhruv:/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))
于 2013-07-30T18:07:26.730 に答える