我怎样才能用 python ruamel.yaml 将锚点放到它的项目上?

How can I put the anchor to its item with python ruamel.yaml?

我有这种格式的 YAML 文件,

A: true
B:
- &C
  tag1: value1
  tag2: value2
- &D
  tag1: value3
  tag2: value4

我想将其转换成下面的格式,添加带有锚点的名称字段。

A: true
B:
- &C
  tag1: value1
  tag2: value2
  name: C
- &D
  tag1: value3
  tag2: value4
  name: D

我不确定是否可行。我该怎么做?

锚信息存储在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

如果您不知道锚点可能出现在您的数据结构中的什么位置,您将 递归遍历字典的值和列表的元素来执行上述操作。