首页 > 解决方案 > 查找文件名中具有特定字符串的所有 .txt 文件,然后读入数据框

问题描述

我有以下不完整的代码,我想执行以下操作

  1. 在文件名中包含以下关键字的子文件夹的文件夹中查找所有 *.txt 文件。
  2. 将txt文件的内容读入数据框。
import os 
import pandas as pd
  
path = os.getcwd() 

keywords = ['test1', 'test2', 'test3']

result = {}  # dict store our results
for filename in os.listdir(path):
    for keyword in keywords:
        if keyword in filename:
            print(filename)
            df = pd.read_excel ('.txt')

所需输出(找到的文件列表和包含所有文件内容的数据框)

test1 Dec 05, 2019 10-30-57.txt
test2 Dec 05, 2019 10-30-57.txt
test3 Dec 05, 2019 10-30-57.txt

主要问题是我不知道如何将其应用于具有许多子文件夹的主文件夹。

标签: pythonpandas

解决方案


我会让你决定如何从目录中获取文件名。

如果要为每个文件名创建一个数据框,则可以使用以下代码:

import pandas as pd
glb = globals()
keywords = ['test1','test2', 'test3']
filelist = ['your list of filenames']
i = 1
for filename in filelist:
    if any(k in filename for k in keywords):
        df = f'df{i}'
        glb[df] = pd.read_csv(filename)
        i+=1

上面的代码将为每个包含 list 中任何单词的文件创建一个数据框 df1, df2, keywords....。我没有使用实际关键字创建数据框。可能会在多个文件名中找到相同的关键字(例如:test1-2021-01-12.txt, test1-2021-01-15.txt。在这种情况下,有两个文件具有相同的test1关键字。因此创建第二个文件将删除第一个文件的内容。

我也不想用文件名创建数据框。文件名中可能有特殊字符或空格。所以我们不能将文件名创建为数据框。相反,我使用df的是从 1 开始的与计数器连接的。

globals() 的使用允许您创建变量并在以后使用它。如果要跟踪创建的所有数据框,请将 df 的值附加到列表中,然后将它们打印出来或使用列表的索引来浏览每个数据框。

如果您想将所有这些读入单个数据帧,那么解决方案非常简单。

df = pd.DataFrame()
for filename in filelist:
    data = pd.read_excel(filename)
    df = df.append(data)

推荐阅读