python 递归 os.path 追加一些刹车

python recurcive os.path append with some brake

嘿,这是我的第一个 post (!) 只是为我的小项目寻找令人头疼的递归解决方案:)

正在尝试收集所有文件夹路径(递归), 那是一些特定的文件 到路径数组。

例如: 我的(根)路径是:

c:/test

文件夹测试包含文件'test.txt' 和一些文件夹:“1”、“2”、“3”。 他们中的任何一个也包含 'test.txt' ! (如果未找到 'text.txt': 只是停止循环,不要在子文件夹中搜索!)

现在我的函数将查找 'test.txt' 然后,将所有文件夹收集到我的文件夹列表中:

if os.path.exists(os.path.join(path, 'test.txt')):
full_list = os.listdir(path)
        folderslist = []
        for folder in full_list:
            if os.path.isfile(os.path.join(path, folder)) == 0:
                folderslist.append(os.path.join(path, folder))

它的工作还不错,只是不是递归的... 真的不知道如何再次调用该函数 使用相同的列表,并强制他更改 'current path'... 不确定 'list' 是否是我再次调用它的最佳数据结构。

我的目标是在此列表中的每个 forlder 中进行一些操作:

c:/test c:/test/1 c:/test/2 c:/test/3

但如果有更多文件夹(不包含 'test.txt' 所以,请不要将其添加到我的文件夹列表,也不要在里面查看)

希望我的第一次 post 足够清楚 :X

您可以使用os.walk遍历子文件夹,如果找不到test.txt,请清空目录列表,这样os.walk就不会再遍历其子文件夹了:

import os
folderslist = []
for root, dirs, files in os.walk('c:/test'):
    if 'test.txt' in files:
        folderslist.append(root)
    else:
        dirs.clear()