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

Python ZipFile模块解压异常:部分文件提取后为0字节求助

问题排查与解决方案

针对你遇到的ZipFile解压后第二个文件为0字节的问题,可从以下几个方向排查:

1. 先确认压缩包本身是否正常

用系统自带的解压工具(比如Windows资源管理器、Linux的unzip命令)手动解压该zip包,如果第二个文件依然是0字节,说明压缩包本身存在损坏或文件本身为空,需要重新获取正确的压缩包。

2. 检查压缩算法兼容性

ZipFile默认仅支持STORED(无压缩)和DEFLATED(标准压缩)两种算法,如果压缩包中第二个文件用了其他算法(比如BZIP2、LZMA),Python可能无法正确解压。

可以在代码中添加日志,查看压缩包内文件的压缩类型:

with zipfile.ZipFile(split[1]) as zpkg_ref:
    for info in zpkg_ref.infolist():
        print(f"文件: {info.filename}, 压缩类型: {info.compress_type}")
  • 若compress_type为12(BZIP2),需确保代码中导入bz2模块;
  • 若为14(LZMA),需导入lzma模块;
  • 其他类型则属于ZipFile不支持的算法,需要更换压缩工具重新打包。

3. 修复异常处理,暴露真实错误

你当前的代码用了except:(捕获所有异常)但只输出模糊提示,可能掩盖了写入失败、权限不足等真实问题。修改为捕获具体异常并打印详细信息:

try:
    with zipfile.ZipFile(split[1]) as zpkg_ref:
        zpkg_ref.extractall(tmpfolder)
except Exception as e:
    print(f'[SYSTEM] 解压 \'{split[1]}\' 出错: {str(e)}')
    continue

比如如果是临时文件夹权限不足、磁盘空间不足,会直接输出对应的错误信息。

4. 检查临时文件夹的权限与磁盘空间

  • 确保tmpfolder路径存在,且当前运行程序的用户有写入权限;
  • 检查磁盘剩余空间,避免因空间不足导致第二个文件写入中断。

可以在代码中提前创建临时文件夹:

import os
if not os.path.exists(tmpfolder):
    os.makedirs(tmpfolder, exist_ok=True)

5. 验证解压后的文件状态

在代码中添加解压后文件大小的检查,确认是解压过程中出问题还是后续被修改:

with zipfile.ZipFile(split[1]) as zpkg_ref:
    zpkg_ref.extractall(tmpfolder)
    for info in zpkg_ref.infolist():
        extracted_path = os.path.join(tmpfolder, info.filename)
        if os.path.exists(extracted_path):
            print(f"解压后 {info.filename} 大小: {os.path.getsize(extracted_path)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:51