使用 ruamel yaml 更改值将不起作用并忽略缩进

Value change with ruamel yaml won't work and ignores indenting

我在以正确的格式将数据转储回 YAML 时遇到问题。查看其他类似问题,但没有找到解决此问题的方法。 Python 中的当前代码:

template = yaml.load(open(templateFile), Loader=yaml.RoundTripLoader)

template["key"] = new_value

yaml.dump(template, sys.stdout, Dumper=yaml.RoundTripDumper, indent=2)

输入:

parameters:
  key: value

输出:

parameters:
  key: value
key: new_value

预期输出:

parameters:
  key: new_value

应该如何修改代码,是更改旧的 "key" 值,还是输入一个缩进正确的新值?

您必须将 new_value 分配给右侧 mapping/dict:

import sys
from ruamel import yaml

template_file = 'input.yaml'
new_value = 'new_value'

template = yaml.load(open(template_file), Loader=yaml.RoundTripLoader)
template['parameters']['key'] = new_value
yaml.dump(template, sys.stdout, Dumper=yaml.RoundTripDumper, indent=2)

缩进的新值 "under" key 需要:

template['parameters']['newkey'] = 'added_value'

请注意,习惯上对Python变量使用snake_case,如template_fileRoundTripLoader/RoundTripDumper是[=27的名称=])