簡體   English   中英

如何使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM