zip = zipfile.ZipFile(destination+ff_name,"w")
zip.write(source)
zip.close()
上面是我正在使用的代码,这里“source”是目录的路径。但是,当我运行此代码时,它只是压缩源文件夹而不是包含在其中的文件和文件夹。我希望它以递归方式压缩源文件夹。使用tarfile模块我可以在不传递任何其他信息的情况下执行此操作请帮忙。感谢
答案 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:])