Python zipfile 模块不压缩文件
Posted
技术标签:
【中文标题】Python zipfile 模块不压缩文件【英文标题】:Python zipfile module doesn't compress files 【发布时间】:2013-08-09 16:54:40 【问题描述】:我在 Python 中遇到了压缩问题。 我知道我应该在写入压缩 zip 文件时调用 ZIP_DEFLATED 方法,但它对我不起作用。 我在 C:zip 目录中有 3 个 PDF 文档。 当我运行以下代码时,它工作得很好:
import os,sys
list = os.listdir('C:\zip')
file = ZipFile('test.zip','w')
for item in list:
file.write(item)
file.close()
它使 test.zip 文件没有压缩。 当我将第四行更改为:
file = ZipFile('test.zip','w', compression = ZIP_DEFLATED)
它还可以使 test.zip 文件不经过压缩。 我还尝试更改写入方法以赋予它 compress_ type 参数:
file.write(item, compress_type = ZIP_DEFLATED)
但这也不起作用。 我在 Win7 中使用 Python 2.7.4 版。 我用另一台计算机(相同的情况,Win7 和 Python 2.7.4)厌倦了代码,它使 test.zip 文件按应有的方式压缩。 我知道 zlib 模块应该可用,当我运行它时:
import zlib
它不会返回错误,如果 zlib 模块有问题,顶部的代码也应该返回错误,所以我怀疑 zlib 不是问题。
【问题讨论】:
您如何检查最终的 zip 文件是否已压缩或未压缩?Zipfile
构造函数的文档说“如果指定了 ZIP_DEFLATED
但 zlib 模块不可用,则还会引发 RuntimeError
。”因此,如果您没有收到错误,它应该可以工作。请注意,没有必要在 write()
调用上指定 compress_type
关键字参数,除非您想覆盖为构造函数提供的 compression
参数值。
【参考方案1】:
默认情况下ZIP模块只存储数据,压缩它你可以这样做:
import zipfile
try:
import zlib
mode= zipfile.ZIP_DEFLATED
except:
mode= zipfile.ZIP_STORED
zip= zipfile.ZipFile('zipfilename', 'w', mode)
zip.write(item)
zip.close()
【讨论】:
不幸的是,这也不起作用。 mode 变量返回一个“8”,因此它成功地将 mode 设置为 ZIP_DEFLATED,但 zipfile 仍然太大。 “还是太大了”,但压缩效果不佳或根本未压缩? 对不起,它现在似乎可以工作,看起来我在尝试使用其他文件时在代码中犯了一个错误。之后我只处理了 3 个 PDF 文档,压缩文件的大小几乎与 3 个 PDF 文档的大小一样大,我认为压缩仍然不起作用。感谢您的帮助! 好的,不客气!如果您认为这是对您问题的有效答案,那么如果您将其标记为已接受,那就太好了! ZIP_STORED 是如何默认的?!?! D:哇!感谢您清除此问题! 7zip 制作的拉链要小得多 ?以上是关于Python zipfile 模块不压缩文件的主要内容,如果未能解决你的问题,请参考以下文章