python ruamel.yaml 包,如何获取 header 注释行?

python ruamel.yaml package, how to get header comment lines?

我想在 header 行获取 YAML 文件注释,例如

# 11111111111111111
# 11111111111111111
# 22222222222222222
# bbbbbbbbbbbbbbbbb
---
start:
....

并且我在加载的数据上使用了ca属性,但是发现上面没有这些注释。还有其他方法可以获取这些评论吗?

目前(ruamel.yaml==0.17.17)出现的评论 在文档开始标记 (---) 未从 DocumentStartTokenDocumentStartEvent,所以这些评论是 在解析过程中有效丢失。即使它们被传递了,它也是 保存它们非常重要,因为 DocumentStartEvent 是静默的 在合成过程中掉落。

您可以将注释放在指令结束符之后 (---) 允许您使用 .ca 获取评论 没有问题的属性,或者完全删除该指标 是多余的(至少在你的例子中)。或者你将不得不 在加载程序周围写一个小包装器:

import sys
import pathlib
import ruamel.yaml

fn = pathlib.Path('input.yaml')

def load_with_pre_directives_comments(yaml, path):
    comments = []
    text = path.read_text()
    if '\n---\n' not in text and '\n--- ' not in text:
         return yaml.load(text), comments
    for line in text.splitlines(True):
        if line.lstrip().startswith('#'):
            comments.append(line)
        elif line.startswith('---'):
            return yaml.load(text), comments
            break

yaml = ruamel.yaml.YAML()
yaml.explicit_start = True
data, comments = load_with_pre_directives_comments(yaml, fn)
print(''.join(comments), end='')
yaml.dump(data, sys.stdout)

给出:

# 11111111111111111
# 11111111111111111
# 22222222222222222
# bbbbbbbbbbbbbbbbb
---
start: 42