如何使用python ruamel.yaml将锚点放在其项上?

2024-04-16 14:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个格式的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

我不确定这是否可能。我该怎么做


1条回答
网友
1楼 · 发布于 2024-04-16 14:36:44

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

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

相关问题 更多 >