Pandas:如何从只匹配特定名称的文件夹中读取xlsx文件

2024-09-28 23:50:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个满是excel文件的文件夹,我必须从该文件夹中只读取3个文件,然后将它们放入单独的数据框中

File1: Asterix_New file_Jan2020.xlsx
File2: Asterix_Master file_Jan2020.xlsx
File3: Asterix_Mapping file_Jan2020.xlsx

我知道下面的语法可以从文件夹中查找xlsx文件,但不知道如何将其与特定关键字关联。在本例中,以“Asterix_2;”开头

files_xlsx = [f for f in files if f[-4:] == "xlsx"]

此外,我试图将每个excel文件放在一个单独的数据框中,但没有成功:

for i in files_xlsx:
    df[i] = pd.read_excel(files_xlsx[0])

如有任何建议,我们将不胜感激


Tags: 文件数据inmaster文件夹newforfiles
3条回答

使用glob.glob进行模式匹配

import glob

for i in glob.glob('Asterix_*.xlsx'):
    ...

首先使用glob(基于@cup的答案)生成要读入的文件列表,然后将它们附加到列表中

import pandas as pd
import glob

my_df_list = [pd.read_excel(f) for f in glob.iglob('Asterix_*.xlsx')]

根据您想要实现的目标,还可以使用dict来允许键值对

我建议使用pathlib。如果所有文件都在一个文件夹中:

from pathlib import Path
from fnmatch import fnmatch
folder = Path('name of folder')

使用glob搜索文件。我还建议使用fnmatch来包含扩展名为大写字母的文件

iterdir允许您遍历文件夹中的文件

name是pathlib中的一个方法,它以字符串格式提供文件名

使用str lower方法可以确保捕获诸如XLSX之类的扩展,它是大写的

 excel_only_files = [xlsx for xlsx in folder.iterdir()
                     if fnmatch(xlsx.name.lower(),'asterix_*.xlsx')]

#you'll have to test this, i did not put it though any tests
excel_only_files = list(folder.rglob('Asterix_*.[xlsx|XLSX]')

从那里,您可以运行列表理解来读取文件:

 dataframes = [pd.read_excel(f) for f in excel_only_files]

相关问题 更多 >