嘿,这是我的第一篇文章(!)只是为我的小项目寻找头痛递归解决方案:)
尝试收集所有文件夹路径(递归),其中包含一些特定文件到路径数组。
例如:我的(根)路径是:
C:/测试
文件夹测试包含文件'test.txt'和一些文件夹:'1','2','3'。它们中的任何一个都包含'test.txt'! (如果找不到'text.txt':只需制动循环,不要在子文件夹中搜索!)
现在我的函数将查找'test.txt',然后将所有文件夹收集到我的folderslist中:
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))
它工作不错,只是没有重复...真的不知道如何用相同的列表再次调用该函数,并迫使他改变'当前路径'...不确定'list'是否是最好的数据结构我再次打电话给它。
我的目标是在此列表的每个文件夹中进行一些操作:
c:/ test c:/ test / 1 c:/ test / 2 c:/ test / 3
但如果有更多的文件夹(不包含'test.txt'所以,只是不要将它添加到我的文件夹列表,不要查看内部)
希望我的第一篇文章足够清楚: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()