我有.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__
答案 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)