-1

我有 zip 文件,每个 zip 文件包含三个子文件夹(即 ini、log 和 output)。我想从输出文件夹中读取一个文件,它包含三个不同名称的 csv 文件。假设三个文件名是:initial.csvintermediate.csvfinal.csv. 只想读取final.csv文件。

我试图读取文件的代码是:

import zipfile
import numpy
import pandas as pd

zipfiles = glob.glob('/home/data/*.zip')
for i in np.arange(len(zipfiles)):
    zip = zipfile.ZipFile(zpfiles[i])
    f = zip.open(zip.namelist().startswith('final'))
    data = pd.read_csv(f, usecols=[3,7])

我得到的错误是'list' object has no attribute 'startswith'

我怎样才能找到正确的文件并阅读它?

4

2 回答 2

2

替换

f = zip.open(zip.namelist().startswith('final'))

f = zip.open('output/final.csv')

如果你能“找到”它:

filename = ([name for name in zip.namelist() if name.startswith('output/final')][0])
f = zip.open(filename)
于 2021-06-24T10:18:25.227 回答
2

要查找子目录,让我们切换到 pathlib,它使用glob

from pathlib import Path
import zipfile
import pandas as pd


dfs = []

files = Path('/home/data/').rglob('*final*.zip') #rglob recursively trawls all child dirs.
for file in files:
    zip = zipfile.ZipFile(zpfiles[file])
    ....
    # your stuff
    df = pd.read_csv(f, usecols=[3,7])
    dfs.append(df)
于 2021-06-24T11:00:32.530 回答