zip = zipfile.ZipFile(destination+ff_name,"w")
zip.write(source)
zip.close()
上面是我正在使用的代码,这里的“source”是目录的路径。但是当我运行这段代码时,它只是压缩源文件夹,而不是其中包含的文件和文件夹。我希望它递归地压缩源文件夹。使用 tarfile 模块,我可以在不传递任何其他信息的情况下做到这一点。请帮忙。谢谢
标准os.path.walk()函数可能对此很有用。
或者,阅读该tarfile
模块以了解其工作方式肯定会有所帮助。事实上,查看标准库的各个部分是如何编写的,是我学习 Python 的一个非常宝贵的部分。
我还没有完全测试过,但它与我使用的类似。
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
我想为这个主题添加一个“新的”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:])