You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:48:02