You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:45:32