我有一个像这样的文件夹结构: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而不是整个目录结构?
答案 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循环中迭代文件+子目录。