Python如何按顺序检索多JSON文件指定键,解决查询不存在时崩溃问题
多JSON文件按优先级顺序查询实现方案
核心问题原因
直接通过字典[key]的方式访问不存在的键会直接抛出KeyError异常,终止程序运行,现有代码没有对键不存在的场景做处理,所以第一个文件查不到就直接崩溃了。
注意:查询不确定是否存在的键时,优先用key in 字典做存在性判断,或者用字典.get(key)方法,不存在时会返回None不会抛出异常
实现方案
1. 核心逻辑
- 严格按照
EnabledJSONFiles的排列顺序依次读取JSON文件 - 对每个文件查询目标key,查询成功直接返回结果、终止遍历
- 查询失败自动进入下一个文件的查询,所有文件都查不到再返回空/提示不存在
2. 完整可运行代码示例
import json EnabledJSONFiles = ['test.json', 'base.json'] def search_key(target_key: str): # 按优先级遍历所有JSON文件 for file_path in EnabledJSONFiles: # 读取解析文件,同时处理文件不存在、格式损坏的异常,避免崩溃 try: with open(file_path, 'r', encoding='utf-8') as f: json_data = json.load(f) except (json.JSONDecodeError, FileNotFoundError): # 当前文件不可用,跳过查询下一个 continue # 判断目标key是否存在,存在直接返回结果 if target_key in json_data: return json_data[target_key] # 所有文件都未查询到目标key return None # 调用示例 if __name__ == "__main__": user_input = input("请输入要查询的关键词:") result = search_key(user_input) if result is not None: print(f"查询结果:{result}") else: print("所有文件中均未找到该关键词")
3. 性能优化方案
如果JSON文件不会频繁修改,可以提前把所有文件内容加载到内存中,避免每次查询都重复读磁盘,提升查询效率:
import json EnabledJSONFiles = ['test.json', 'base.json'] # 程序启动时预加载所有JSON内容到内存 preloaded_json = [] for file_path in EnabledJSONFiles: try: with open(file_path, 'r', encoding='utf-8') as f: preloaded_json.append(json.load(f)) except: preloaded_json.append({}) def search_key_fast(target_key: str): for data in preloaded_json: if target_key in data: return data[target_key] return None
内容的提问来源于stack exchange,提问作者Kimitzuni
相关产品推荐
相关产品推荐

