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

使用shutil库压缩文件时能否取消子文件夹层级,将所有文件放在压缩包同一层级?

问题解答

shutil.make_archive 仅支持保留原有目录结构压缩,没有内置参数可以直接实现扁平化打包,你不需要提前手动归集所有文件,借助Python自带的zipfile库配合目录遍历就能实现需求,代码实现成本很低。

实现思路

  • 用os.walk遍历目标根目录下的所有层级,收集所有文件的绝对路径
  • 向压缩包写入文件时,仅保留原文件名作为压缩包内的存储路径,丢弃原有目录层级

注意事项

如果不同子目录下存在同名文件,直接扁平化写入会导致后写入的文件覆盖先写入的文件,如有需要可以自行添加重命名逻辑(比如给同名文件加序号后缀)。

示例代码

import os
import zipfile

def flatten_zip(root_dir, output_zip_path):
    # 创建zip文件,用ZIP_DEFLATED模式开启压缩
    with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # 遍历root_dir下的所有目录和文件
        for dirpath, _, filenames in os.walk(root_dir):
            for filename in filenames:
                # 拼接得到文件的完整路径
                full_file_path = os.path.join(dirpath, filename)
                # 写入压缩包时仅用filename作为路径,实现扁平化
                zipf.write(full_file_path, arcname=filename)

# 调用示例
flatten_zip('./dir_name', './output.zip')

运行上述代码后生成的output.zip,内部就只会包含所有文件,没有任何子文件夹层级,和你期望的输出效果一致。


内容的提问来源于stack exchange,提问作者Tristan Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:00:05