锚信息存储在anchor
属性中,它有一个value
您应该阅读的字段,以及一个always_dump
您需要设置的字段,如果您希望锚在没有任何别名引用它们的情况下出现:
import sys
import ruamel.yaml
yaml_str = """\
A: true
B:
- &C
tag1: value1
tag2: value2
- &D
tag1: value3
tag2: value4
"""
yaml = ruamel.yaml.YAML()
# yaml.indent(mapping=4, sequence=4, offset=2)
# yaml.preserve_quotes = True
data = yaml.load(yaml_str)
for mapping in data['B']:
mapping['name'] = mapping.anchor.value
mapping.anchor.always_dump = True
yaml.dump(data, sys.stdout)
这使:
A: true
B:
- &C
tag1: value1
tag2: value2
name: C
- &D
tag1: value3
tag2: value4
name: D
如果您不知道锚点可能出现在数据结构中的什么位置,则必须递归地遍历 dicts 的值和列表的元素来执行上述操作。