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

Python使用shutil.make_archive打包如何避免生成嵌套目录结构

解决方案

你当前的问题是shutil.make_archive的base_dir参数传值错误导致的,不需要自行实现zipfile/tarfile打包逻辑,仅调整参数即可实现需求。

shutil.make_archive核心参数规则说明:

  • root_dir:指定待打包文件所在的顶层目录,所有需要打包的内容都需要位于该目录下
  • base_dir:填写相对于root_dir的相对路径,指定实际要打包的内容,传.代表打包root_dir下的所有内容,且不会携带外层目录结构

修正后代码(shutil版本)

import shutil

def download_file(file_name):
   # download to /tmp/stuff/downloads/file_name
   pass

download_file('file1.txt')
download_file('hello.md')

shutil.make_archive(
    root_dir='/tmp/stuff/downloads', 
    base_dir='.', 
    base_name='my_file', 
    format='zip'
)

按上述参数生成的my_file.zip解压后直接包含file1.txt和hello.md,无任何嵌套目录。

备选实现(zipfile版本,适用于复杂打包需求)

如果后续需要自定义过滤文件、调整压缩等级等更灵活的打包逻辑,可以使用zipfile模块实现,示例如下:

import os
import zipfile

download_dir = '/tmp/stuff/downloads'
zip_save_path = 'my_file.zip'

with zipfile.ZipFile(zip_save_path, 'w', zipfile.ZIP_DEFLATED) as zip_obj:
    for file_name in os.listdir(download_dir):
        full_file_path = os.path.join(download_dir, file_name)
        # 仅打包文件,跳过子目录
        if os.path.isfile(full_file_path):
            # arcname参数指定压缩包内的文件名,直接传文件名即可避免嵌套目录
            zip_obj.write(full_file_path, arcname=file_name)

内容的提问来源于stack exchange,提问作者Mitch Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:24:05