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

Iva*_*nov 7 python zipfile pandas

我有.zip存档,其中包含filename.xlsx,我想逐行解析Excel工作表。

在这种情况下,如何将文件名正确传递到pandas.read_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:
            ....
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,结果是:

AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 7

您可以将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()}
Run Code Online (Sandbox Code Playgroud)

用法:

df = pd.read_excel(io.BytesIO(read_zip(r'C:\download\test.xlsx.zip', 'test.xlsx')))
Run Code Online (Sandbox Code Playgroud)

或者,您可以将文件从zip文件提取到磁盘,然后将其解析为常规文件。

PS在StackOverflow上有大量示例,展示了如何爆炸zip文件...