我有一个包含子目录的文件夹,该子目录包含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)
我的意图是通过仅选择文件的开始名称来遍历每个子目录读取文件,因为那里还有其他文件,然后将它们附加在一起,并最终合并了每个子目录中的所有表
答案 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])