如何读取嵌套YAML中environment及指定dev分支的目标键值对?
合并YAML环境顶层配置与指定分支配置
现有YAML配置文件内容
global: environment: DURATION: 3599 BLA: 1234 dev1: BASEPATH: bla.co.uk LOGGING: ERROR dev2: BASEPATH: bla.co.uk LOGGING: ERROR
当前仅获取指定分支的代码
import yaml if __name__ == '__main__': stream = open("devtest.yaml", 'r') dictionary = yaml.load(stream) for key, value in dictionary["global"]["environment"]["dev1"].items(): print (key + " : " + str(value))
需求说明
需要同时获取environment下的顶层键值对(如DURATION、BLA),以及指定的dev1或dev2分支内的键值对,不能包含未选中的dev分支内容。
修改后的Python代码
import yaml if __name__ == '__main__': # 指定要获取的目标分支,可改为"dev2"切换 target_env = "dev1" with open("devtest.yaml", 'r') as stream: # 用safe_load替代load避免安全风险 config = yaml.safe_load(stream) env_config = config["global"]["environment"] # 收集顶层非分支的键值对 merged_config = {} for key, value in env_config.items(): # 值不是字典的就是顶层全局配置 if not isinstance(value, dict): merged_config[key] = value # 合并目标分支的配置内容 merged_config.update(env_config[target_env]) # 输出所有合并后的键值对 for key, value in merged_config.items(): print(f"{key} : {value}")
代码说明
- 替换
yaml.load为yaml.safe_load,避免任意代码执行的安全风险 - 通过
target_env变量可以快速切换要获取的dev分支 - 先筛选
environment下值不为字典的项,这些是顶层全局配置 - 用
update方法将目标分支的配置合并到顶层配置字典中 - 最后遍历输出合并后的所有键值对
内容的提问来源于stack exchange,提问作者ppstacknow
相关产品推荐
相关产品推荐

