如何在Python中使用ruamel.yaml从YAML文件中获取注释?

M. *_*ley 6 python yaml comments ruamel.yaml

我想从我加载的YAML文件中获取注释字符串ruamel.yaml.该项目文件缺乏一个API的参考,我找不到一个相关的例子.访问评论的正确方法是什么?

import ruamel.yaml

yaml = """\
%YAML 1.2
---
# C1
a: # C2
  # C3
  # C4
  b: 1 # C5
  c: # A comment here will not be parsed properly by ruamel.yaml v0.11.14
  - abc # C6
  - xyz # C7
  # C8
# C9
"""

loaded = ruamel.yaml.round_trip_load(yaml)

# Now what?
Run Code Online (Sandbox Code Playgroud)

M. *_*ley 8

库作者在 BitBucket上的一个问题(2016 年 5 月 9 日)中对此发表了评论:

注释保存尚未稳定,例如,如果映射的键和值不在同一行并且键(或键和值)有注释,我需要做一些事情。我最初的目标是保留现有评论,而不是过多的操纵。

通过一些实验,我确定了上述问题中提供的示例代码的以下工作:

print('Comment 1: ' + loaded.ca.comment[1][0].value)
print('Comment 2: ' + loaded.ca.items['a'][2].value)
print('Comment 3: ' + loaded.ca.items['a'][3][0].value)
print('Comment 4: ' + loaded.ca.items['a'][3][1].value)
print('Comment 5: ' + loaded['a'].ca.items['b'][2].value)
print('Comment 6: ' + loaded['a']['c'].ca.items[0][0].value)
print('Comment 7: ' + loaded['a']['c'].ca.items[1][0].value)
print('Comment 8: ' + loaded['a']['c'].ca.end[0].value)
print('Comment 9: ' + loaded['a']['c'].ca.end[1].value)
Run Code Online (Sandbox Code Playgroud)

  • 是的,一般来说,如果你有一个 mapping/dict 对象,你使用 `ca.items[key] 来获取与键关联的注释,同样对于序列/列表,你使用 `ca.items[index]` 来表示特定元素. `_test/test_comment_manipulation.py` 中的操作可以进一步提供一些关于如何设置新评论的线索。 (2认同)