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
相关产品推荐
相关产品推荐

