我正在尝试单独压缩一堆文件夹。文件夹包含文件。我写了一个似乎完美的脚本,除了生成的zip文件实际上没有压缩。它与原始目录的大小相同!
这是我的代码:
import os, zipfile
workspace = "C:\\ziptest"
dirList = os.listdir(workspace)
def zipDir(path, zip):
for root, dirs, files in os.walk(path):
for file in files:
zip.write(os.path.join(root, file))
for item in dirList:
zip = zipfile.ZipFile('%s.zip' % item, 'w')
zipDir('C:\\ziptest\%s' % item, zip)
zip.close()
答案 0 :(得分:3)
我不是Python专家,但是快速查找显示zip.write还有另一个参数,例如zipfile.ZIP_DEFLATED。我从here抓住了它。我引用:
write方法的第三个可选参数控制要使用的压缩方法。或者更确切地说,它控制是否应该压缩数据。默认值为zipfile.ZIP_STORED,它将数据存储在存档中,而不进行任何压缩。如果安装了zlib模块,您还可以使用zipfile.ZIP_DEFLATED,它可以“压缩”压缩。
引用为here。寻找常数ZIP_DEFLATED;它的定义是:
常用ZIP压缩方法的数字常量。这需要zlib模块。目前不支持其他压缩方法。
我认为这意味着只支持默认压缩...希望有所帮助!
答案 1 :(得分:0)
你有没有理由不只是调用shell命令,比如
def zipDir(path, zip):
subprocess.Popen('7z a -tzip %s %s'%(path, zip))