python - Python:尝试使用已关闭的 ZIP 存档
问题描述
我想打开一个 zip 文件A001-C-002.zip
。其引发Attempt to use ZIP archive that was already closed
错误。
from pathlib import Path
import pandas as pd
import zipfile
import os
import sys
path = "./CODEX/input/"
for filename in os.listdir(os.getcwd()):
with open(os.path.join(os.getcwd(), filename), 'r') as f:
# Antibody information
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 os.path.isdir(filename):
for line in z.open(filename):
print(line)
z.close()
追溯:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_4872/558093962.py in <module>
9 for filename in z.namelist():
10 if not os.path.isdir(filename):
---> 11 for line in z.open(filename):
12 print(line)
13 z.close()
/usr/lib/python3.8/zipfile.py in open(self, name, mode, pwd, force_zip64)
1499 raise ValueError("pwd is only supported for reading files")
1500 if not self.fp:
-> 1501 raise ValueError(
1502 "Attempt to use ZIP archive that was already closed")
1503
ValueError: Attempt to use ZIP archive that was already closed
解决方案
您的麻烦来自代码的最后三行:
for line in z.open(filename):
print(line)
z.close()
看起来您希望z.close
调用关闭您在这些行的第一行中打开的文件。但这不是它的作用。z
是您一直在扫描的整个 zip 存档,当您关闭它时,您将无法再次打开其中包含的任何文件(无论如何都不能重新打开整个文件)。
我怀疑你想要更像这样的东西:
with z.open(filename) as file:
for line in file:
print(line)
在这里,我们使用一个with
语句来处理归档中内部文件的关闭,该文件始终保持打开状态(直到外部with
语句结束)。我为该文件对象命名,file
以便with
语句可以将其交给for
循环。
推荐阅读
- reactjs - 如何使用反应检查路线?
- angular - 为什么我在 ng-template 中双击?
- c# - 将现有项目添加到 GIT 中心的最佳方法是什么?
- php - 使用 XML 和 PHP 从下拉列表中获取选定的值文本
- python - 替换大量数组数据集中的所有 nan 值
- c# - Xamarin.Android:以编程方式更改应用程序语言?
- python - numpy:阻止 numpy.array() 尝试协调元素。从列表中创建 ndarry 而不尝试合并/协调元素
- swift - 如何将子字符串从 Swift 传递到 C?
- python - 如何在python曲线拟合中绘制误差线?
- javascript - 重置/清除 antd RangePicker (React)