python recursive os.path 附加一些刹车
Posted
技术标签:
【中文标题】python recursive os.path 附加一些刹车【英文标题】:python recurcive os.path append with some brake 【发布时间】:2018-09-13 01:48:52 【问题描述】:嘿,这是我的第一篇文章(!) 只是照顾我的小项目的头痛递归解决方案:)
尝试收集所有文件夹路径(递归), 那是包含一些特定的文件 到路径数组。
例如: 我的(根)路径是:
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))
它的工作还不错,只是没有递归...... 真的不知道如何再次调用该函数 使用相同的列表,并强迫他更改“当前路径”... 不确定“列表”是否是我再次调用它的最佳数据结构。
我的目标是在此列表中的每个文件夹中进行一些操作:
c:/test c:/test/1 c:/test/2 c:/test/3
但是如果有更多的文件夹(不包含'test.txt',所以不要将它添加到我的文件夹列表中,也不要往里面看)
希望我的第一篇文章足够清楚:X
【问题讨论】:
【参考方案1】:您可以使用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()
【讨论】:
感谢它对我来说非常简单的解决方案,但 glob recursive 和 os.walk 存在一个问题:无论如何它们都只能进入,只有在找到 test.txt 时我才必须进入三个。例如:我们在里面得到了这个:c:\test\test.txt c:\test\1\test.txt c:\test\2\a\test.txt c:\test\3\test.txt c:\test\3\a\test.txt
folderslist 输出必须是:c:\test\test.txt c:\test\1\test.txt c:\test\3\test.txt c:\test \3\a\test.txt
没有 c:\test\2\a\test.txt 导致“流程”被剪断......它必须是这样的,因为我们不想使用递归步骤ot 文件夹,如 'c:\'。
我明白了。我将研究一个不同的解决方案。同时,请使用此详细说明更新您的问题。否则就不清楚了。谢谢。
我刚刚用您想要的逻辑更新了我的答案。请重试。
working :) 清除目录列表真是太棒了!我会尽量让自己清楚。非常感谢!!!以上是关于python recursive os.path 附加一些刹车的主要内容,如果未能解决你的问题,请参考以下文章