在给定某些约束的情况下,如何使用Python遍历目录中的文件并输出数据帧?

在给定某些约束的情况下,如何使用Python遍历目录中的文件并输出数据帧?,python,pandas,os.walk,Python,Pandas,Os.walk,所以我使用Pyhton,我有一个父目录,有两个子目录,依次包含许多目录,每个目录有三个文件。我想获取每个目录的第三个文件(即.CSV文件),并将它们一起解析为一个数据帧。这就是我目前掌握的代码 import os rootdir ='C:\\Dir\\Dir\\Dir\\root(parent)dir' # os.listdir(rootdir) # os.getcwd() filelist = os.listdir(rootdir) # file_count = len(filelist)

所以我使用Pyhton,我有一个父目录,有两个子目录,依次包含许多目录,每个目录有三个文件。我想获取每个目录的第三个文件(即.CSV文件),并将它们一起解析为一个数据帧。这就是我目前掌握的代码

import os

rootdir ='C:\\Dir\\Dir\\Dir\\root(parent)dir'
# os.listdir(rootdir)
# os.getcwd()

filelist = os.listdir(rootdir)
# file_count = len(filelist)

def list_files(dir):
    r = []
    for root, dirs, files in os.walk(dir):
        # if files.startswith('C74'):
            for name in files:
                r.append(os.path.join(root, name))
    return r

filelist = list_files(rootdir)
现在使用“文件列表”,我将所有目录中包含的所有文件路径作为字符串。现在我需要找到: 1.以三个特定字母开头的文件名(例如funtest,在本例中,第一个字母是fun)
2.取每三个文件,并从中构造一个数据帧,这样我就可以继续执行数据分析。

IIUC使用pathlib中的递归函数,我们可以更轻松地执行此操作:

    from pathlib import Path
    csv = [f for f in Path(r'parent_dir').rglob('*C74*.csv')]
    df = pd.concat([pd.read_csv(f) for f in csv])
如果您想再次子集列表,您可以这样做

subset_list = [x for x in csv if 'abc' in x.stem] 
试验
谢谢你的回答!您知道是否可以给出另一个通过名称排序的条件吗?例如,如果我只想要包含“C74”和“abc”的文件?在我的例子中,这将解决每三个文件都需要挑选的问题。我试着在后面放另一个.rglob,但它似乎不起作用。你可以在第一个递归函数之后,但在concat之前再做一次列表comp@Zygos检查吗?我试着这样做,但得到了一个错误:“TypeError:类型为'WindowsPath'的参数不可编辑”。我希望这样做,因为理想情况下,每个单独的文件都需要在浓缩之前进行清理。事实上,我找到了一个答案:我刚刚在rglob函数中添加了XYZ:
csv=[f for f in Path(r'P:\\APO\\Data\\GOB Data\\LaserData').rglob('*c72*XYZ*.csv')]
感谢您的帮助!
[x for x in csv if 'abc' in x.stem]
out : ['C74_abc.csv', 'abc_C74.csv']