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

Python解压指定文件夹子目录下.zip/.gz文件报错FileNotFoundError求解

解决Python批量解压子目录下ZIP/GZ文件的路径错误问题

问题原因

报错的核心原因是:使用extractall()解压时,若压缩包内部包含多级子目录,或者目标解压目录未提前创建(部分场景下zipfile无法自动创建嵌套目录),会触发路径找不到的错误。另外你原代码只处理了ZIP文件,未覆盖GZ格式。

修正后的代码

以下代码会:

  • 遍历指定目录下所有子目录的.zip和.gz文件
  • 提前创建解压目标目录,避免路径不存在问题
  • 分别处理ZIP和GZ格式(GZ多为单文件压缩,需用gzip模块)
  • 增加异常捕获,避免单个损坏压缩包导致程序中断
import zipfile
import fnmatch
import os
import gzip
import shutil

root_path = r"C:\boxes\am-2021\am-20216"
# 同时匹配zip和gz格式文件
patterns = ['*.zip', '*.gz']

for root, dirs, files in os.walk(root_path):
    for pattern in patterns:
        for filename in fnmatch.filter(files, pattern):
            file_path = os.path.join(root, filename)
            # 定义解压目标目录:与压缩文件同目录,以去掉后缀的文件名作为文件夹名
            extract_dir = os.path.join(root, os.path.splitext(filename)[0])
            
            # 提前创建目标目录(已存在则跳过)
            os.makedirs(extract_dir, exist_ok=True)
            
            try:
                if filename.endswith('.zip'):
                    # 处理ZIP文件
                    with zipfile.ZipFile(file_path, 'r') as zip_ref:
                        zip_ref.extractall(extract_dir)
                        print(f"已解压ZIP:{file_path} -> {extract_dir}")
                elif filename.endswith('.gz'):
                    # 处理GZ文件(单文件压缩)
                    output_file = os.path.join(extract_dir, os.path.splitext(filename)[0])
                    with gzip.open(file_path, 'rb') as f_in:
                        with open(output_file, 'wb') as f_out:
                            shutil.copyfileobj(f_in, f_out)
                        print(f"已解压GZ:{file_path} -> {output_file}")
            except Exception as e:
                print(f"处理失败 {file_path}: {str(e)}")

关键修改说明

  • 用os.makedirs(extract_dir, exist_ok=True)提前创建解压目录,确保路径存在
  • 新增GZ文件处理逻辑,适配单文件压缩场景
  • 使用with语句管理文件句柄,避免资源泄漏
  • 添加异常捕获,单个文件处理失败不影响整体流程
  • 输出日志便于追踪处理进度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:51:12