使用 ruamel.yaml 检索文档头部的评论

Retrieve comments at the head of the document using ruamel.yaml

有没有一种方法可以在 YAML 文档加载后使用 ruamel.yaml 检索其头部的注释?

例如:

yaml_str = """\
# comment at head of document
date: 20210326 # comment about key-pair
"""

我知道如何检索 date 的评论:

from ruamel.yaml import YAML
yml = YAML(typ='rt')
data = yml.load(yaml_str)
comments = data.ca.items.get('date')

,但不是最初的评论。

这就是我发现的检查对象的方式:

>>> data.ca.comment[1][0].value
'# comment at head of document\n'

目前没有获取此数据的方法。

之所以找不到开头的评论,是因为 与所有其他评论相比,处理方式不同。当在输入流中看到其他评论时,有 是否解析了可以附加评论的数据节点,但这当然不是 在任何数据之前的开头注释的情况。

您可以检索这些评论,但您应该确保检查 ruamel.yaml 的版本,因为评论的附加方式发生了变化 已公布

import ruamel.yaml

yaml_str = """\
# comment at head of document

# another one after empty line
date: 20210326 # comment about key-pair
"""


yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)

if ruamel.yaml.version_info <= (0, 17, 0):
     comments = [x.value for x in data.ca.comment[1]]
else:
     raise NotImplementedError

print(comments)

给出:

['# comment at head of document\n\n', '# another one after empty line\n']

.ca.comment 属性将来肯定会消失 发布,所以你可以只使用 try-except。并将空行整理为 前面的评论作为一个额外的换行符,也会改变格式,但会 最有可能在发生这种情况时获得稳定的访问方法(所以你应该 不必多次升级您的代码)。