遍历子目录,读取以给定名称开头的文件并附加

时间:2019-08-27 06:43:48

标签: python python-3.x dataframe

我有一个包含子目录的文件夹,该子目录包含CSV文件。每个子目录都有名为modified.csv的CSV文件,add_field.csv和retired.csv。如何在每个子目录中循环读取每个子目录中的所有文件,这些文件以经过修改的,added_field和已退休的名称开头,然后将它们递归地附加在一起?

在这种情况下,我尝试过 os walk ,但是我不知道如何使用 os walk 来按名称读取每个目录中的所有文件,追加并移动到下一个目录,并执行与上一个表相同的过程。这是我的愚蠢代码

from os import walk
f = []
path ="working dir"
for (dirpath, dirnames, filenames) in walk(path):
     file1 = [filenames for filenames in os.listdir(path) if 
             filenames.startswith("modified")]
    file2 = [filenames for filenames in os.listdir(path) if 
            filenames.startswith("Added_field")]
    file3 = [filenames for filenames in os.listdir(path) if 
            filenames.startswith("Retired")]
    df1 = pd.read_csv(file1)
    df2 = pd.read_csv(file2)
    df3 = pd.read_csv(file3)
    Finalcombined_df = df1.append([df2,df3], sort=False)

我的意图是通过仅选择文件的开始名称来遍历每个子目录读取文件,因为那里还有其他文件,然后将它们附加在一起,并最终合并了每个子目录中的所有表

2 个答案:

答案 0 :(得分:0)

您可以使用Path.rglob

从所有子目录中获取所有文件。
from pathlib import Path

path = '.'

prefixes = ['modified', 'Added_field', 'Retired']

found = []


for file in Path(path).rglob('*.csv'):
    for p in prefixes:
        if file.name.startswith(p):
            found.append(file)
            break

print(found)

答案 1 :(得分:0)


from pathlib import Path

p = Path.cwd()  # if you're in the current working dir
p = Path('to level dir')  # insert a top level path of choice


f_names = ['modified', 'Added_field', 'Retired']

f = [y for x in f_names for y in p.glob(f'**/{x}*.csv') ]  # ** gets all sub-dirs

df =  pd.concat([pd.read_csv(x) for x in f])