2010-12-15 37 views
0

我想单独拉链一堆文件夹。这些文件夹包含文件。我写了一个脚本,似乎完美工作,除了生成的zip文件没有实际压缩。 THey与原始目录的大小相同!与Python的邮编目录

这里是我的代码:

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() 

回答

3

我不是一个Python的专家,但快速查找表明,有对zip.write如zipfile.ZIP_DEFLATED另一种说法。我从here那里抓起来的。我引用:

写入方法的第三个可选参数控制要使用的压缩方法。或者说,它控制着数据是否应该被压缩。默认值为zipfile.ZIP_STORED,它将数据存储在归档中,而不进行任何压缩。如果安装了zlib模块,您还可以使用zipfile.ZIP_DEFLATED,它可以让您“放气”压缩。

参考文献是here。寻找常量ZIP_DEFLATED;它的定义如下:

通常的ZIP压缩方法的数值常量。这需要zlib模块。目前不支持其他压缩方法。

我想这意味着只支持默认压缩......希望有帮助!

0

是否有任何理由,你不只是调用shell命令,就像

def zipDir(path, zip): 
    subprocess.Popen('7z a -tzip %s %s'%(path, zip)) 
+2

Python有直接的zip文件支持,是跨平台的,并且不依赖于外部程序......这就是原因。 – 2011-06-23 22:26:01