如何使用 ruamel.yaml 添加评论

spa*_*iff 4 python yaml comments ruamel.yaml

我正在尝试使用 ruamel.yaml 创建数据结构,并希望在转储和/或再次加载之前添加注释。不幸的是,所有示例都首先使用往返转储程序加载一些字符串,或者使用不再存在的 API。

这就是我想要转储的内容:

test: asdf # Test Comment!
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

test: asdf # Test Comment!
Run Code Online (Sandbox Code Playgroud)

打印。

# Test Comment!test: asdf
Run Code Online (Sandbox Code Playgroud)

不知何故,注释位于值的前面而不是后面。我究竟做错了什么?

Ant*_*hon 5

您可以尝试通过添加 来做到这一点CommentTokens,但 start_mark 类型必须来自ruamel.yaml.error

insert制作a CommentedMap(这是在进行正常的往返加载时映射将被加载的内容),然后使用它的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)
Run Code Online (Sandbox Code Playgroud)

这使:

test: asdf # Test Comment!
Run Code Online (Sandbox Code Playgroud)

column=0可选的。如果你不指定起始列,你会在#, 0 之前得到两个空格,试图将它一直推到前面,但当然键值对会妨碍。

#您可以在为该方法指定的 EOL 注释中指定yaml_add_eol_comment,但如果不存在,则会将其添加到前面。

如果连续行上的多个键后面有多个注释,并且希望注释对齐,则只需指定添加的第一个注释的列。

  • 我认为文档中没有这样的内容,当库的开发人员是个懒惰的人时就会发生这种情况。 (2认同)