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
)出现的评论
在文档开始标记 (---
) 未从
DocumentStartToken
到 DocumentStartEvent
,所以这些评论是
在解析过程中有效丢失。即使它们被传递了,它也是
保存它们非常重要,因为 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
我想在 header 行获取 YAML 文件注释,例如
# 11111111111111111
# 11111111111111111
# 22222222222222222
# bbbbbbbbbbbbbbbbb
---
start:
....
并且我在加载的数据上使用了ca
属性,但是发现上面没有这些注释。还有其他方法可以获取这些评论吗?
目前(ruamel.yaml==0.17.17
)出现的评论
在文档开始标记 (---
) 未从
DocumentStartToken
到 DocumentStartEvent
,所以这些评论是
在解析过程中有效丢失。即使它们被传递了,它也是
保存它们非常重要,因为 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