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

时间:2018-03-07 16:42:24

标签: python pandas zipfile

我有.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:
            ....

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

AttributeError: __exit__

2 个答案:

答案 0 :(得分:3)

您可以将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文件......

答案 1 :(得分:1)

使用zipfile

import zipfile

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