使用Python gzip模块压缩文件后体积反而更大,求问题原因
问题原因与解决方案
嘿,这个问题其实是因为你每次循环都打开并关闭gzip文件导致的,让我给你拆解下:
为什么压缩文件反而更大?
gzip格式的每个独立压缩片段都带有自己的头部和尾部信息。你在循环里每次执行with gzip.open('output.gz', 'ab') as f,相当于把每一行数字都作为一个单独的gzip压缩块写入文件。这些重复的头部/尾部累加起来的开销,加上单条短内容几乎没什么压缩空间(甚至可能因为压缩算法的额外开销反而变大),最终导致整个output.gz的体积比原始文件还大。
正确的写法
把文件打开操作放到循环外面,让所有内容都写入同一个gzip压缩流里,这样gzip可以利用数据的连续性(比如连续递增的数字)进行有效压缩,而且只需要一份头部/尾部:
import gzip # 一次性打开文件,循环内持续写入 with gzip.open('output.gz', 'wb') as f: for idx in range(100000): line = (str(idx) + '\n').encode() f.write(line)
额外说明
如果后续需要向已有的gzip文件追加内容,确实可以用'ab'模式,但要注意尽量减少打开/关闭文件的次数——比如打开一次文件,完成所有追加操作后再关闭,而不是每次追加都重新打开。这样能避免生成大量独立的压缩片段,保证压缩效率。
内容的提问来源于stack exchange,提问作者Jeyekomon
相关产品推荐
相关产品推荐

