Python 熊猫。如何从ZIP存档中读取Excel文件

Python 熊猫。如何从ZIP存档中读取Excel文件,python,pandas,zipfile,Python,Pandas,Zipfile,我有文件名为.xlsx的.zip存档文件,我想逐行解析Excel工作表 在这种情况下,如何正确地将文件名传递到pandas.read\u excel 我试过: import zipfile import pandas myzip=zipfile.ZipFile(filename.zip) for fname in myzip.namelist(): with myzip.open(fname) as from_archive: with pandas.read_excel

我有文件名为.xlsx的.zip存档文件,我想逐行解析Excel工作表

在这种情况下,如何正确地将文件名传递到pandas.read\u excel

我试过:

import zipfile
import pandas
myzip=zipfile.ZipFile(filename.zip)
for fname in myzip.namelist():
    with myzip.open(fname) as from_archive:
        with pandas.read_excel(from_archive) as fin:
            for line in fin:
            ....
但它似乎不起作用,结果是:

AttributeError: __exit__
使用zipfile

import zipfile

archive = zipfile.ZipFile('filename.zip', 'r')
xlfile = archive.open('filename.xlsx')
df = pd.read_excel(xlfile)

您可以将zip文件提取到内存中的变量中,并使用
io.BytesIO
对其进行解析:

import io
from zipfile import ZipFile
import pandas as pd


def read_zip(zip_fn, extract_fn=None):
    zf = ZipFile(zip_fn)
    if extract_fn:
        return zf.read(extract_fn)
    else:
        return {name:zf.read(name) for name in zf.namelist()}
用法:

df = pd.read_excel(io.BytesIO(read_zip(r'C:\download\test.xlsx.zip', 'test.xlsx')))
或者,您可以将文件从zip文件提取到磁盘,并将其作为常规文件进行解析


PS关于StackOverflow有很多例子,展示了如何分解zip文件…

如果你的zip文件包含多个.XLS(X)文件怎么办?你应该编辑你的问题,使其包含
myzip
的声明,而不是将其作为注释添加。@MaxU,现在不要紧了。我们的目标是解决最简单的问题。@IvanVodopyanov,你为什么要一行一行地读它?它有那么大,不能放进内存吗?@MaxU,我不在乎。首先我想打开它。您能帮助我吗?他们已经在使用
zipfile
,问题是试图使用
pd.read\u excel
作为上下文manager@Floydian,我想你的答案和我的问题是一样的。我说的对吗?干得好——zip文件是什么?显然,read_excel方法不能接受同时是zip的URL(其中嵌入了.xlsx)@leeprovost,我会首先使用
请求下载这样的zip文件,然后使用答案中的
read_zip()
函数;)不管怎么说,要为卡侬而不是熊猫这样做?