Python 查找文件名中具有特定字符串的所有.txt文件,然后读入数据帧

Python 查找文件名中具有特定字符串的所有.txt文件,然后读入数据帧,python,pandas,Python,Pandas,我有以下不完整的代码,我想做以下 在文件名中包含以下关键字的子文件夹中查找所有*.txt文件 将txt文件的内容读取到数据帧 所需输出(找到的文件列表和包含所有文件内容的数据框) 主要问题是,我不知道如何将此应用于包含多个子文件夹的主文件夹。我将让您决定如何从目录中获取文件名 如果要为每个文件名创建数据帧,则可以使用以下代码: import pandas as pd glb = globals() keywords = ['test1','test2', 'test3'] filelist =

我有以下不完整的代码,我想做以下

  • 在文件名中包含以下关键字的子文件夹中查找所有*.txt文件
  • 将txt文件的内容读取到数据帧
  • 所需输出(找到的文件列表和包含所有文件内容的数据框)


    主要问题是,我不知道如何将此应用于包含多个子文件夹的主文件夹。

    我将让您决定如何从目录中获取文件名

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

    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
    
    上面的代码将创建数据帧df1、df2等。。。。对于包含列表中任何单词的每个文件
    关键字
    。我没有使用实际关键字创建数据帧。可能会出现在多个文件名中发现相同关键字的情况(例如:
    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)
    

    我将让您决定如何从目录中获取文件名

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

    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
    
    上述代码将为每个文件创建一个数据框df1、df2,…。该文件包含列表
    关键字
    中的任何单词。我不会使用实际关键字创建数据框。在多个文件名中可能会出现相同关键字的情况(例如:
    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)
    

    为了进一步阐述我的意见,我将举一个例子:

    导入操作系统
    作为pd进口熊猫
    关键词=['test1'、'test2'、'test3']
    帧=[]
    对于os.walk('.')中的路径、目录和文件:
    对于文件中的文件:
    如果有(键入关键字的键入文件)和file.endswith('.txt'):
    filename=os.path.join(路径,文件)
    打印(文件名)
    frames.append(pd.read\u excel(文件名))
    全方位角=pd.concat(框架,轴=0)
    

    在这里,我们使用
    os.walk()
    遍历目录结构,然后仅打印和读取满足您条件的文件。这些文件作为数据帧单独读取,然后使用
    pd.concat()

    将其连接到一个最终数据帧。为了扩展我的评论,我将提供一个示例:

    导入操作系统
    作为pd进口熊猫
    关键词=['test1'、'test2'、'test3']
    帧=[]
    对于os.walk('.')中的路径、目录和文件:
    对于文件中的文件:
    如果有(键入关键字的键入文件)和file.endswith('.txt'):
    filename=os.path.join(路径,文件)
    打印(文件名)
    frames.append(pd.read\u excel(文件名))
    全方位角=pd.concat(框架,轴=0)
    

    在这里,我们使用
    os.walk()
    遍历目录结构,然后只打印和读取满足条件的文件。这些文件作为数据帧单独读取,然后使用
    pd.concat()连接到一个最终数据帧

    如果你想打开一个文件,你可以这样给出:
    df=pd.DataFrame();对于文件中的f\u xls:data=pd.read\u excel(f,'Sheet1');df=df.append(data)
    如果您想将所有文件附加到一个数据帧中。如果您想分离,您可以使用
    os.walk()
    子目录为其创建名称串联的分离文件,它允许您迭代地“遍历”整个目录树。如果您想打开一个文件,您可以给出如下内容:
    df=pd.dataframe();对于文件中的f_xls:data=pd.read_excel(f,'Sheet1');df=df.append(data)
    如果要将所有文件都附加到一个数据框中。如果要分离,可以创建名称为concatenated的分离文件,并使用允许“漫游”的子目录通过完整的目录树进行迭代。感谢您的回复。通过您的代码,我得到以下错误
    不支持的格式,或损坏的文件:预期的BOF记录;找到b'Header L
    。实际的文件格式是
    input5(f)Dec 5.2019 10-30-57.txt
    。我已尝试删除
    (f)
    但没有什么区别……我通过以下
    框架实现了这一点。append(pd.read_csv(filename,sep='none',header=none,engine='python'))
    。但是,我只需要找到一种方法,从每行的df中删除
    \t
    。我尝试了
    sep=\t
    ,但没有效果。为了清晰起见