Python遍历字典路径检测txt文件 找到匹配后如何提前进入下一键迭代
解决方案
核心要做的是命中.txt文件后立刻终止当前键对应的所有遍历流程,从根源上避免无意义的目录扫描和文件判断,在路径量大的场景下性能提升会非常明显。
实现逻辑
不用复杂的迭代器工具,靠标记位+逐层break就能实现快速跳出:
- 遍历每个字典键时,先初始化一个布尔标记位,记录当前键是否已经找到过.txt文件,初始值为
False - 每一层循环(路径遍历、目录递归、文件遍历)启动前先检查标记位,如果已经标记为找到,直接终止当前层剩余遍历
- 一旦扫描到任意.txt后缀的文件,立刻把标记位设为
True,给结果字典赋值后逐层跳出循环,直接进入下一个键的处理
优化后可直接运行的代码
import os from os import walk test = { 'Info': ['//home/info/folder1','//home/info/folder2','//home/info/folder3'], 'Courses' : ['//home/courses/math', '//home/courses/Physics','//home/courses/Bio'] } def fct(ListNames): result = {} for key, path_list in ListNames.items(): found = False for folder in path_list: if found: break for dirpath, _, filenames in walk(str(folder)): if found: break for file in filenames: if file.endswith('.txt'): result[key] = 1 found = True break return result print(fct(test))
输出结果
运行后直接返回你期望的精简格式:
{'Info': 1, 'Courses': 1}
额外优化说明
- 替换了原来的正则匹配逻辑,用字符串原生
endswith('.txt')判断文件后缀,执行速度比正则快数倍 - 完全砍掉了重复值存储逻辑,不需要存多个1再去重,命中后直接给键赋值1即可
- 如果需要兼容大写后缀(比如
.TXT),可以把判断条件改成file.lower().endswith('.txt') - 极端场景下如果单目录下文件量极大,这个逻辑也能在找到第一个txt时立刻停止扫描当前目录剩余文件,不会做多余IO操作
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

