python - 如何使用 ruamel.yaml 添加评论

标签 python yaml comments 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 方法:

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 注释,但是如果 它不存在,它将被添加到前面。

如果连续多个键后有多个评论 行,并希望您的注释对齐,您只需指定 添加了第一个列。

关于python - 如何使用 ruamel.yaml 添加评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56166055/

相关文章:

python - Blas GEMV 发射失败 : m=3, n=2 [Op:MatMul]

Python Selenium 未加载整页源代码

ruby - 在 YAML 变量中包含 jekyll/liquid 模板数据?

java - 使用ansible安装Java JDK时出现404错误

php - 我将如何评论我从另一位作者修改的 PHP 类?

excel - 使用 PowerShell 从 Excel 文件中读取注释

Python 单元测试 : Fail due to import from same folder

python - 定义实例变量时的最佳实践

azure - 按顺序运行管道的设置 - Azure Devops

python - 在 Python 2.x 中创建信息注释的 Pythonic 方式是什么?