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

