Как я могу получить комментарии, когда я перебираю объект YAML
yaml = YAML()
with open(path, 'r') as f:
yaml_data = yaml.load(f)
for obj in yaml_data:
# how to get the comments here?
Это исходные данные (незанятая пьеса)
---
- name: gather all complex custom facts using the custom module
hosts: switches
gather_facts: False
connection: local
tasks:
# There is a bug in ansible 2.4.1 which prevents it loading
# playbook/group_vars
- name: ensure we're running a known working version
assert:
that:
- 'ansible_version.major == 2'
- 'ansible_version.minor == 4'
После комментариев Anthon, именно так я нашел доступ к комментариям в дочерних узлах (необходимо уточнить):
for idx, obj in enumerate(yaml_data):
for i, item in enumerate(obj.items()):
pprint(yaml_data[i].ca.items)
Вы не указали свой ввод, но поскольку ваш код ожидает obj
а не ключ, я предполагаю, что корневой уровень вашего YAML является последовательностью, а не сопоставлением. Если вы хотите получить комментарии после каждого элемента (например, nr 1
и the last
), вы можете сделать:
import ruamel.yaml
yaml_str = """\
- one # nr 1
- two
- three # the last
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
for idx, obj in enumerate(data):
comment_token = data.ca.items.get(idx)
if comment_token is None:
continue
print(repr(comment_token[0].value))
который дает:
'# nr 1\n'
'# the last\n'
Вам может понадобиться полоса ведущего октоторпа и конечная новая линия.
Обратите внимание, что это работает с текущей версией (0.15.61), но нет гарантии, что она не может измениться.