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

Python用shutil/zipfile解压Zip文件遇FileNotFoundError求助

问题原因与解决办法

原因分析

  • 这是Python标准库zipfile模块在Windows环境下的路径兼容性问题:Windows文件系统会自动忽略文件夹名称末尾的空格,但Python的zipfile/shutil在解析Zip包内的路径时,会严格保留原路径的末尾空格,导致创建文件夹时尝试生成带末尾空格的路径,而Windows实际不允许这种命名规则,最终抛出FileNotFoundError。
  • 尽管CPython仓库标注相关问题已修复,但该修复未回溯到3.11.1版本,或是你的场景触发了修复未覆盖的边缘情况。

解决办法

临时手动修复方案

直接通过zipfile.ZipFile遍历所有文件条目,手动去除路径末尾的空格后再执行解压:

import zipfile
import os

def extract_zip_fix(zip_path, target_dir):
    with zipfile.ZipFile(zip_path, 'r') as zf:
        for info in zf.infolist():
            # 修正路径:移除文件夹/文件名末尾的空格
            fixed_path = os.path.normpath(info.filename).rstrip()
            # 处理文件夹:先创建无末尾空格的目录
            if info.is_dir():
                os.makedirs(os.path.join(target_dir, fixed_path), exist_ok=True)
                continue
            # 解压文件到修正后的路径
            with open(os.path.join(target_dir, fixed_path), 'wb') as f:
                f.write(zf.read(info.filename))

# 调用示例
extract_zip_fix("待解压文件.zip", "./解压目标目录")

长期解决方案

  • 升级Python版本:将Python升级到3.11.4及以上版本,官方在后续小版本中完善了Windows路径末尾空格的处理逻辑,升级后shutil.unpack_archive和zipfile.ZipFile.extractall可正常工作。
  • 使用第三方库:若无法升级Python,可使用patool库(需先执行pip install patool安装),它会调用系统原生解压工具,自动适配Windows的路径规则:
import patoolib
patoolib.extract("待解压文件.zip", outdir="./解压目标目录")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:15:52