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

如何用Python为已有YAML文件中Bird节点的Pet变量添加值?

用Python更新YAML文件的正确方式

我们需要修改以下input.yml文件,为Animal节点下Bird的Pet列表添加新值(比如Duck和Swan):

version: "3.2"
Animal:
  mamal:
    wild:
      - Tiger
      - Lion
    Pet:
      - Dog
      - Cat
  Bird:
    wild:
      - Peacock
      - Ostrich
    Pet:
      - Parrot
      - Dove
Fish:
  Sea:
    - Shark
    - whale

原代码的问题

你提供的代码存在几个关键错误:

  • 用yaml.safe_load_all()读取单个YAML文档,得到的是包含单个字典的列表,后续遍历逻辑完全错误
  • 循环遍历的是列表中的字典对象,而非索引,'Animal' in contents1[k]的写法不符合语法逻辑
  • 使用append(['Duck','swan'])会把整个列表作为单个元素插入Pet列表,而非添加两个独立元素

正确实现代码

import yaml

# 读取单个YAML文档,用safe_load即可
with open('input.yml', 'r') as read_file:
    data = yaml.safe_load(read_file)

# 定位到目标节点,批量添加新元素
data['Animal']['Bird']['Pet'].extend(['Duck', 'Swan'])
# 如果是单个元素添加,也可以用:
# data['Animal']['Bird']['Pet'].append('Duck')
# data['Animal']['Bird']['Pet'].append('Swan')

# 将修改后的数据写回文件,保留原格式风格
with open('input.yml', 'w') as write_file:
    yaml.dump(
        data,
        write_file,
        default_flow_style=False,  # 保持块级格式,和原文件一致
        sort_keys=False  # 保留原键的顺序,避免自动排序打乱结构
    )

关键说明

  • 单个YAML文档用yaml.safe_load()读取即可,safe_load_all()适用于多文档场景
  • extend()用于给列表批量添加多个元素,append()则是添加单个元素
  • sort_keys=False可以避免默认的字母排序,保留原文件的键顺序
  • default_flow_style=False确保输出的YAML是易读的块格式,而非紧凑的流格式

内容的提问来源于stack exchange,提问作者CodingNinja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:10:50