【发布时间】:2020-05-29 14:56:58
【问题描述】:
考虑以下文件:
- k0: v0
vars: &splat0
VAR0: potato # vars from blob0
- k1: v1
vars: &splat1
VAR1: spud # vars from blob1
- k: v
extra: # merged vars from blob0 + blob1
<<: *splat0
<<: *splat1
它利用了 YAML 的 merge key 特性。
这是一个有效的 YAML 文件吗?规范 (1.1, 1.2) 说,在映射节点中存在“每个键都是唯一的限制”,但是不清楚合并键本身是否是主题到唯一性约束,或者是否只有解析合并后的映射键需要唯一。
PyYAML 对此进行解析并合并键,但 cmets 丢失了。 ruamel 能够保留 cmets 但会引发 DuplicateKeyError,如果您明确允许重复键,则它会解析但合并会丢失。
这个输入是否是有效的 YAML?它应该如何在 Python 中正确解析?
【问题讨论】:
-
“PyYAML 解析这个并合并键,但是 cmets 丢失了”所以它有效吗?我不确定您要做什么,但我不确定问题是否包含它
-
理想情况下,我想保留 cmets 而不是弄乱合并(我无法控制输入)。但这不是这个问题的目的,这个问题的范围要小得多:YAML 规范中实际上允许重复的合并键。
-
在建议的副本中回答是否正确合并并保留 cmets。
-
我确定。这个问题是关于 YAML 规范是否允许重复的合并键。该问题的答案并没有解决这个问题(他们实际上是 ruamel 的作者,所以无论如何这都是利益冲突)。但无论如何,这篇文章很有趣,所以谢谢你的链接。
标签: python parsing yaml pyyaml ruamel.yaml