使用zipfile python模块创建完整目录的zip

时间:2010-12-26 04:29:21

标签: python module zipfile

zip = zipfile.ZipFile(destination+ff_name,"w")
            zip.write(source)
            zip.close()

上面是我正在使用的代码,这里“source”是目录的路径。但是,当我运行此代码时,它只是压缩源文件夹而不是包含在其中的文件和文件夹。我希望它以递归方式压缩源文件夹。使用tarfile模块我可以在不传递任何其他信息的情况下执行此操作请帮忙。感谢

3 个答案:

答案 0 :(得分:2)

标准os.path.walk()功能可能对此有很大帮助。

或者,阅读tarfile模块以了解它的工作方式肯定会有所帮助。实际上,查看标准库的编写方式是我学习Python的宝贵部分。

答案 1 :(得分:2)

我没有完全测试过,但它与我使用的相似。

zip = zipfile.ZipFile(destination+ff_name, 'w', zipfile.ZIP_DEFLATED)
rootlen = len(source) + 1
for base, dirs, files in os.walk(source):
    for file in files:
        fn = os.path.join(base, file)
        zip.write(fn, fn[rootlen:])

此示例来自此处:

http://bitbucket.org/jgrigonis/mathfacts/src/ff57afdf07a1/setupmac.py

答案 2 :(得分:1)

我想在这个主题中添加一个“新的”python 2.7特性:ZipFile可以用作上下文管理器,因此你可以这样做:

        with zipfile.ZipFile(my_file, 'w') as myzip:
            rootlen = len(xxx) #use the sub-part of path which you want to keep in your zip file 
            for base, dirs, files in os.walk(pfad):
                for ifile in files:
                    fn = os.path.join(base, ifile)
                    myzip.write(fn, fn[rootlen:])