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

Python批量压缩子文件夹时的路径异常问题(含空格-空格的路径)

Python批量压缩子文件夹时的路径异常问题(含空格-空格的路径)

嘿,我来帮你搞定这个问题!其实你遇到的zip文件位置不对的问题,和路径里的“空格-空格”没有关系,是对shutil.make_archive的参数用法理解错啦~

先分析下你原来代码的问题:

  • os.listdir(path)拿到的只是子文件夹的名字(比如"Folder1"),但你直接把这个名字传给make_archive的第一个参数base_name,它会默认在当前工作目录(也就是你运行脚本时的目录,这里刚好是C:\Users\MME106)生成zip文件,而不是你想要的Folders目录下。
  • 另外,你第三个参数传的是path(父目录),这会导致每次压缩的是整个父目录的内容,而不是单个子文件夹,这肯定不是你要的效果对吧?

接下来给你修正后的代码,完美实现“每个子文件夹单独生成同名zip,且zip文件放在父目录Folders下”:

import os
import shutil

path = r"C:\Users\MME106\OneDrive - Company\Bureau\Test_py_pdf\Folders"

# 遍历路径下的所有条目
for item in os.listdir(path):
    # 拼接子文件夹的完整路径
    subfolder_path = os.path.join(path, item)
    # 确保当前条目是目录(跳过文件)
    if os.path.isdir(subfolder_path):
        # 设置zip文件的完整路径(不带.zip后缀,make_archive会自动加)
        zip_output_path = os.path.join(path, item)
        # 调用make_archive:压缩指定的子文件夹,生成对应zip
        # root_dir是父目录,base_dir是要压缩的子文件夹名,这样zip里会包含子文件夹本身
        shutil.make_archive(zip_output_path, 'zip', root_dir=path, base_dir=item)

给你解释下关键参数:

  • zip_output_path:指定zip文件生成的位置和名称,用os.path.join拼接绝对路径,就不会跑到其他目录去了。
  • root_dir=path:表示要压缩的内容所在的根目录。
  • base_dir=item:表示要压缩root_dir下的哪个子目录,这样生成的zip里会包含子文件夹本身(而不是只包含文件夹里的文件)。

另外,你之前试的几种路径写法:

  • 加r前缀的原始字符串是对的,能正确处理路径里的特殊字符(比如空格、连字符),不用加引号或者@(Python里没有@路径写法,那是C#的语法哦)。

这样修改后,每个子文件夹都会被单独压缩成同名zip,并且乖乖放在Folders目录下啦~

备注:内容来源于stack exchange,提问作者Maxence MELIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:18:08