我怎样才能用 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
如果您不知道锚点可能出现在您的数据结构中的什么位置,您将
递归遍历字典的值和列表的元素来执行上述操作。
我有这种格式的 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
如果您不知道锚点可能出现在您的数据结构中的什么位置,您将 递归遍历字典的值和列表的元素来执行上述操作。