![](/img/trans.png)
[英]How can I add double quotes to items in a Python YAML dump without ruamel.yaml?
[英]How can I add a comment with ruamel.yaml
我正在尝试使用ruamel.yaml创建数据结构,并希望在转储和/或再次加载之前添加注释。 不幸的是,所有示例都首先使用往返转储程序加载了一些字符串,或者不再使用现有的API。
这是我要转储的内容:
test: asdf # Test Comment!
我尝试了以下方法:
insert = ruamel.yaml.comments.CommentedMap()
start_mark = ruamel.yaml.error.CommentMark(0)
insert['test'] = 'asdf'
insert.ca.items['test'] = [ None,
[ruamel.yaml.CommentToken(value='# Test Comment!', start_mark=start_mark, end_mark=None)],
None,
None
]
ruamel.yaml.round_trip_dump(insert, sys.stdout)
打印。
# Test Comment!test: asdf
注释以某种方式位于值的前面而不是后面。 我究竟做错了什么?
您可以尝试通过将做到这一点CommentTokens
,但start_mark类型必须是正在添加从ruamel.yaml.error
。
insert
CommentedMap
(在进行正常的往返加载时,映射将作为加载该映射),然后使用其yaml_add_eol_comment
方法要yaml_add_eol_comment
:
import sys
import ruamel.yaml
insert = ruamel.yaml.comments.CommentedMap()
insert['test'] = 'asdf'
insert.yaml_add_eol_comment('Test Comment!', 'test', column=0)
yaml = ruamel.yaml.YAML()
# yaml.indent(mapping=4, sequence=4, offset=2)
yaml.dump(insert, sys.stdout)
这使:
test: asdf # Test Comment!
column=0
是可选的。 如果不指定起始列,则在#
,0之前将两个空格一直推到最前面,但是键-值对当然也是如此。
您可以在为yaml_add_eol_comment
方法指定的EOL注释中指定#
,但是如果不存在,它将作为前缀。
如果您在安全行上的多个键之后有多个注释,并且想要对齐注释,则只需指定添加的第一个注释的列。
有关最新文档, 请https://yaml.readthedocs.io/en/latest/example.html
CommentedMap
是双向加载时类似结构的dict
,它支持将键插入特定位置,同时可以选择添加注释:
import sys
from ruamel.yaml import YAML
yaml_str = """\
key: value # first line and comment!
"""
yaml = YAML()
data = yaml.load(yaml_str)
data.insert(1, 'test', 'asdf', comment="Test Comment!")
yaml.dump(data, sys.stdout)
输出:
key: value # first line and comment!
test: asdf # Test Comment!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.