- , , ruamel.yaml ¹, "-", . :
import ruamel.yaml
yaml_str = """\
foo: &xyz
a: 42
bar:
<<: *xyz
"""
data = ruamel.yaml.round_trip_load(yaml_str)
assert ruamel.yaml.round_trip_dump(data) == yaml_str
, data , . , , " " . data['foo']['bar']['a'] , data['foo'] 'bar', " ".
( ), , data ruamel.yaml.comments.CommentedMap(), , merge_attrib ( _yaml_merge) , add_yaml_merge(). (int, CommentedMap()) .
baz = ruamel.yaml.comments.CommentedMap()
baz['b'] = 196
baz.yaml_set_anchor('klm')
data.insert(1, 'baz', baz)
'baz' 'bar' , . data['bar']:
data['bar'].add_yaml_merge([(0, baz)])
ruamel.yaml.round_trip_dump(data, sys.stdout)
:
foo: &xyz
a: 42
baz: &klm
b: 196
bar:
<<: [*xyz, *klm]
( , add_yaml_merge
print(getattr(data['bar'], ruamel.yaml.comments.merge_attrib))
)
, :
data = ruamel.yaml.comments.CommentedMap([
('foo', ruamel.yaml.comments.CommentedMap([('a', 42)])),
])
data['foo'].yaml_set_anchor('xyz')
data['bar'] = bar = ruamel.yaml.comments.CommentedMap()
bar.add_yaml_merge([(0, data['foo'])])
data = ruamel.yaml.round_trip_load(yaml_str).
¹ : .