python zipfile实现压缩整个目录和子目录
zipfile背景简介
zipfile是python提供的一个简单高效的模块。可以用很迅速的方法来进行文件压缩和解压的过程。
细节性的内容可以查看zipfile的文档
zipfile文档
这里先介绍几个简单的方法
f = zipfile.ZipFile(output_path,'w',zipfile.ZIP_DEFLATED)
#参数说明:第一个参数为输出的路径,文件读写,压缩方式
f.write(path)
#path是相对路径
f.close()
#一个关键方法,只有调用了close之后才会保证完成压缩
核心原理DFS
利用的是对目录进行深度优先遍历,首先把第一级目录中的文件进行遍历,如果是文件,则把它连同当前路径一起加入result(list),如果是子目录,则在整个目录上继续DFS。直到所有的文件都被加入。
代码实现
def dfs_get_zip_file(input_path,result):
#
files = os.listdir(input_path)
for file in files:
if os.path.isdir(input_path+'/'+file):
dfs_get_zip_file(input_path+'/'+file,result)
else:
result.append(input_path+'/'+file)
def zip_path(input_path,output_path,output_name):
f = zipfile.ZipFile(output_path+'/'+output_name,'w',zipfile.ZIP_DEFLATED)
filelists = []
dfs_get_zip_file(input_path,filelists)
for file in filelists:
f.write(file)
f.close()
return output_path+r"/"+output_name
if __name__ == '__main__':
zip_path(r"./working",'D:','wok.zip')