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

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

4

3 回答 3

2

标准os.path.walk()函数可能对此很有用。

或者,阅读该tarfile模块以了解其工作方式肯定会有所帮助。事实上,查看标准库的各个部分是如何编写的,是我学习 Python 的一个非常宝贵的部分。

于 2010-12-26T04:38:01.427 回答
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

于 2010-12-26T05:03:37.937 回答
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:])
于 2013-10-20T19:08:46.240 回答