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.txtfolderslist 输出必须是: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 附加一些刹车的主要内容,如果未能解决你的问题,请参考以下文章

python os.path

Python os.path

python os.path模块

python os.path模块--转载

(转)Python os.path模块

二十八python中的os模块