Python遍历模块路径字典收集对应TXT文件的问题及解决方案咨询
解决遍历模块路径字典时的KeyError问题及TXT文件收集方案
问题根源分析
你遇到的KeyError是因为代码里的核心遍历逻辑出了问题:
- 首先
modulesDict[path]里的path是个未定义的变量,或者你误把字典的最后一个条目当成键来访问,导致程序找不到对应键而报错。 - 另外原代码里的
if j != 0: continue完全没有意义——j是路径字符串,和数字0比较只会让所有路径都被跳过,根本收集不到任何文件。
修复后的完整方案
我给你整理了一个更健壮的实现,既能解决KeyError,还能灵活存储每个模块的TXT文件列表:
import os # 你的模块路径字典(示例) modulesDict = { 'Module1': ['folder1/folder2/Module1'], 'Module2': ['folder1/folder2/Module2'] } # 用一个字典统一存储每个模块对应的TXT文件列表(比单独创建N个变量更易维护) module_txt_collections = {} # 遍历字典的每个模块名和对应的路径列表 for module_name, module_paths in modulesDict.items(): current_module_txt = [] for path in module_paths: # 先检查路径是否存在,避免路径不存在导致的报错 if not os.path.isdir(path): print(f"⚠️ 路径 {path} 不存在,已跳过") continue # 遍历路径下的所有文件,筛选txt后缀 for filename in os.listdir(path): if filename.endswith(".txt"): current_module_txt.append(filename) # 将当前模块的TXT列表存入结果字典 module_txt_collections[module_name] = current_module_txt # 如果你确实需要单独的变量,可以从结果字典中取出 list_module1 = module_txt_collections['Module1'] list_module2 = module_txt_collections['Module2'] # 测试输出 print("Module1的TXT文件:", list_module1) print("Module2的TXT文件:", list_module2)
关键改进点
- 彻底避免KeyError:用
modulesDict.items()直接遍历字典的键值对(模块名+对应路径列表),不需要手动指定键,从根源上避免了键访问错误。 - 路径合法性检查:添加了
os.path.isdir(path)判断,防止因路径不存在或不是目录导致的FileNotFoundError,让代码更健壮。 - 更灵活的存储方式:用一个结果字典
module_txt_collections来统一管理所有模块的TXT文件列表,比手动创建list_module1、list_module2这类变量更易维护——尤其是当模块数量增多时,不用一个个新增变量。 - 移除无效逻辑:删掉了原代码中无意义的
if j !=0: continue语句,确保所有有效路径都能被遍历。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

