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

Python操作A001-C-002.zip报Attempt to use ZIP archive that was already closed错误如何处理

错误触发原因
  1. 你通过with关键字创建ZipFile对象时,with上下文管理器会自动在代码块执行结束后关闭压缩包资源,无需手动调用close()方法。
  2. 你将z.close()写在了遍历压缩包内文件的循环内部,第一次处理完单个内部文件后就直接关闭了压缩包,后续循环尝试读取下一个内部文件时,压缩包已经处于关闭状态,直接抛出对应错误。
  3. 额外逻辑问题:你使用os.path.isdir(filename)判断的是本地文件系统中对应路径是否为目录,无法正确识别压缩包内部的目录结构,判断逻辑存在错误。
修复方法
  • 删掉手动调用z.close()的代码行,交由with上下文自动管理压缩包的生命周期
  • 替换目录判断逻辑,使用ZipFile内置的is_dir()方法判断压缩包内路径是否为目录
  • 额外优化:外层遍历本地文件、打开本地文件的逻辑完全没有用到打开的文件对象f,还存在变量名filename重复覆盖的问题,抗体读取逻辑也不需要放在循环内重复执行,可根据实际需求调整冗余逻辑

修复后参考代码:

from pathlib import Path
import pandas as pd
import zipfile
import os
import sys

path = "./CODEX/input/"

# 抗体读取逻辑不需要放在循环里,只读一次即可
ab = pd.read_excel("HUBMAP B004 codex antibodies metadata.xlsx")
print(f"Antibody metadata column names:\n {ab.columns.values}")

# Patient A001
with zipfile.ZipFile("A001-C-002.zip") as z:
    for filename in z.namelist():
        # 判断压缩包内路径是否为目录
        if not z.getinfo(filename).is_dir():
            for line in z.open(filename):
                print(line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:45:05