web-dev-qa-db-ja.com

パンダ。 ZipアーカイブからExcelファイルを読み取る方法

Filename.xlsxを含む.Zipアーカイブがあり、Excelシートを1行ずつ解析したいと思います。

この場合、ファイル名を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__
9
Ivan Vodopyanov

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ファイルを分解する方法を示しています...

8
MaxU

Zipfileの使用

import zipfile

archive = zipfile.ZipFile('filename.Zip', 'r')
xlfile = archive.open('filename.xlsx')
df = pd.read_Excel(xlfile)
1
Floydian