python显式引用_如何使用显式引用转储YAML?

本文介绍了在拉梅尔亚姆勒中如何使用往返模式处理yaml文件,尤其是关于合并映射的操作。虽然在往返模式下合并不会实际发生,但可以利用CommentedMap的add_yaml_merge方法来实现类似功能。通过示例代码展示了如何插入和管理合并映射,以保留数据结构的原始信息。
摘要由CSDN通过智能技术生成

如果你想创造这样的东西,至少在拉梅尔亚姆勒¹,您应该使用往返模式,这也保留合并。以下内容不会引发断言错误:import ruamel.yaml

yaml_str = """\

foo: &xyz

a: 42

bar:

<<:>

"""

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())元组的列表。在

^{pr2}$

您需要在数据的'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:

<<:>

(如果您想看看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)。在

¹免责声明:我是该软件包的作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值