Python递归单独压缩每个文件夹 shutil打包包含所有子目录问题求助
问题原因
shutil.make_archive参数使用错误:该函数的语法为shutil.make_archive(归档文件保存路径, 归档格式, 要打包的根目录, 要打包的子目录),你当前代码第三个参数传的是根路径path,没有指定第四个参数为当前要打包的单个文件夹,所以每次执行都会把根路径下所有内容全部打包,自然首个压缩包就包含了所有子文件夹。- 文件夹遍历逻辑不符合需求:你用
os.walk遍历会拿到所有层级的子文件夹路径,如果你的需求仅为打包根目录下的一级子文件夹,不需要递归遍历所有深层子目录,否则会产生大量冗余的子文件夹压缩包。
修正方案
shutil模块完全可以实现该需求,不需要更换工具,修正后代码如下:
import os import shutil # 设置根路径 path = r"G:\Folder" # 遍历根目录下的一级条目 for entry in os.scandir(path): # 仅处理文件夹,跳过文件 if entry.is_dir(): # 第三个参数填根路径,第四个参数填当前要打包的文件夹名 shutil.make_archive(entry.path, 'zip', path, entry.name) print(f"已完成文件夹 {entry.name} 的压缩")
修正逻辑说明:
- 用
os.scandir仅遍历根目录下的一级内容,避免拿到深层子文件夹 - 调用
shutil.make_archive时补充了第四个参数,指定仅打包当前选中的单个文件夹,不会把根目录下所有内容都打包进去
内容的提问来源于stack exchange,提问作者The_Nabzter
相关产品推荐
相关产品推荐

