如何找到所需的文件并在 zip 文件中读取它?
How to find a required file and read it in a zip file?
我有 zip 文件,每个 zip 文件包含三个子文件夹(即 ini、log 和 output)。我想从输出文件夹中读取一个文件,它包含三个具有不同名称的 csv 文件。假设三个文件名为:initial.csv
、intermediate.csv
、final.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'
如何找到正确的文件并阅读它?
替换
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)
要找到子目录,让我们切换到使用 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)
我有 zip 文件,每个 zip 文件包含三个子文件夹(即 ini、log 和 output)。我想从输出文件夹中读取一个文件,它包含三个具有不同名称的 csv 文件。假设三个文件名为:initial.csv
、intermediate.csv
、final.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'
如何找到正确的文件并阅读它?
替换
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)
要找到子目录,让我们切换到使用 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)