您的位置:首页 >如何使用 Python 将多个子文件夹(不含父目录)打包为单个 ZIP 文件
发布于2026-05-03 阅读(0)
扫一扫,手机访问

本文介绍如何用 Python 的 zipfile 模块精准压缩指定父目录下的所有子文件夹及其内容,跳过顶层父目录结构,实现解压后直接得到 Folder1、Folder2 等子文件夹,避免冗余嵌套。
在日常文件整理或项目分发时,我们常常遇到这样一个需求:想把一个父目录下的所有子文件夹打包成一个 ZIP 文件,并且希望解压后,直接就能看到“Folder1”、“Folder2”这些子文件夹,而不是先看到一个多余的父目录层。这个需求听起来简单,但用常规方法却容易踩坑。
如果你直接用 `shutil.make_archive` 去压缩整个父目录,得到的 ZIP 文件会完整保留原始路径。解压时,你会看到类似“Parent folder/Folder1/1.txt”的嵌套结构,多了一层完全不必要的父目录。那么,如何才能实现那种“解压即见子文件夹”的扁平化结构呢?
关键在于一个核心操作:在将每个文件写入 ZIP 时,只使用它相对于父目录的子路径作为压缩包内的路径。换句话说,就是要把“Parent folder/”这个前缀给精准地剔除掉。
下面这个方案健壮且可复用,能很好地解决这个问题:
import os
import glob
import zipfile
def compress_subfolders(parent_path, output_zip, include_parent_dir=False):
"""
将 parent_path 下的所有直接子文件夹(及其全部内容)压缩为单个 ZIP 文件。
:param parent_path: 父目录路径(如 'Parent folder')
:param output_zip: 输出 ZIP 文件路径(如 'archive.zip')
:param include_parent_dir: 若为 True,则保留父目录名作为 ZIP 根目录(不推荐);默认 False(扁平化)
"""
# 获取所有子文件夹下的非空文件(支持多级嵌套,但仅从子文件夹开始采集)
files_to_compress = []
for subfolder in os.listdir(parent_path):
subpath = os.path.join(parent_path, subfolder)
if os.path.isdir(subpath):
# 递归收集该子文件夹下所有文件(含子子目录)
for root, dirs, files in os.walk(subpath):
for file in files:
files_to_compress.append(os.path.join(root, file))
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file_path in files_to_compress:
if include_parent_dir:
# 保留完整相对路径(含父目录名)
arcname = os.path.relpath(file_path, os.path.dirname(parent_path))
else:
# 关键:移除 parent_path,使 Folder1/... 成为 ZIP 内顶层路径
arcname = os.path.relpath(file_path, parent_path)
zipf.write(file_path, arcname)
# 使用示例
if __name__ == "__main__":
parent_folder = "Parent folder" # 替换为你的实际父目录名
output_zip = "combined_2024.zip"
compress_subfolders(parent_folder, output_zip)
print(f"✅ 已成功打包 {len(glob.glob(os.path.join(parent_folder, '*/*.*')))}+ 个文件到 {output_zip}")
理解以下几个要点,你就能完全掌握这个方法的精髓:
在应用上述代码时,有几点需要留意:
立即学习“Python免费学习笔记(深入)”;
运行脚本后,生成的 ZIP 文件解压结果会完全符合预期:直接呈现出 Folder1、Folder2 等清晰的顶层子目录结构,真正做到开箱即用,没有一丝冗余。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9