Python:压缩文件夹+文件

时间:2014-01-25 21:35:03

标签: python compression zip zipfile

我有一个像这样的文件夹结构:C:\ Users \ Simon \ Desktop \ mySoftware \ files \ output \

在输出文件夹中,有一个文件和一个包含另一个文件的文件夹。

我需要Python来压缩'output'文件夹中的文件(和文件夹)。

我尝试了以下内容:

#!/usr/bin/env python
import os, zipfile

simonsFiles = 'C:\Users\Simon\Desktop\mySoftware\files\output\\'

simonsZip = zipfile.ZipFile("myzipfile.zip", "w")
for dirname, subdirs, files in os.walk(simonsFiles):
    simonsZip.write(dirname)
    for filename in files:
        simonsZip.write(os.path.join(dirname, filename))
simonsZip.close()

但Python在整个结构中创建了一个zip文件夹:

用户\西蒙\桌面\ mySoftware \文件\输出\

当我得到输出时,它有我要压缩到zip的文件夹和文件。

如何让Python将文件夹和文件压缩成zip而不是整个目录结构?

1 个答案:

答案 0 :(得分:4)

您可能希望将第二个可选参数arcname提供给zf.write()http://docs.python.org/2/library/zipfile#zipfile.ZipFile.write)。 以下功能对我有用:

def zip_dir(zipname, dir_to_zip):
    dir_to_zip_len = len(dir_to_zip.rstrip(os.sep)) + 1
    with zipfile.ZipFile(zipname, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
        for dirname, subdirs, files in os.walk(dir_to_zip):
            for filename in files:
                path = os.path.join(dirname, filename)
                entry = path[dir_to_zip_len:]
                zf.write(path, entry)

此函数不归档空子目录,为此,您必须在第二个for循环中迭代文件+子目录。