Сохранить/выгрузить файл YAML с комментариями в PyYAML
У меня есть файл yaml, который выглядит следующим образом:
# The following key opens a door
key: value
Есть ли способ, которым я могу load и dump использовать эти данные при сохранении комментария?
Ответ 1
PyYAML выбрасывает комментарии на очень низком уровне (в Scanner.scan_to_next_token).
Хотя вы могли бы адаптировать или расширять его для обработки комментариев во всем стеке, это было бы серьезной модификацией. Dump ing (= emitting) комментарии кажутся более легкими и обсуждались в билет 114 на старый трекер ошибок PyYAML. К сожалению, старые билеты не были заархивированы (и archive.org поиск в настоящее время нарушен).
Ответ 2
Если вы используете блочный структурированный YAML, вы можете использовать пакет python¹ ruamel.yaml, который является производным от PyYAML и поддерживает сохранение комментариев комментариев:
import sys
import ruamel.yaml
yaml_str = """\
# example
name:
# details
family: Smith # very common
given: Alice # one of the siblings
"""
code = ruamel.yaml.round_trip_load(yaml_str)
code['name']['given'] = 'Bob'
ruamel.yaml.round_trip_dump(code, sys.stdout)
с результатом:
# example
name:
# details
family: Smith # very common
given: Bob # one of the siblings
Обратите внимание, что комментарии конца строки все еще выровнены.
Вместо обычных объектов list и dictcode состоит из завернутых версий², на которые добавлены комментарии.
¹ Установить с помощью pip install ruamel.yaml. Работает на Python 2.6/2.7/3.3 +
Суб >
² ordereddict используется в случае отображения, чтобы сохранить порядок