Сохранить / выгрузить файл YAML с комментариями в PyYAML

У меня есть файл yaml, который выглядит так:

# The following key opens a door key: value 

Есть ли способ load и dump эти данные, сохранив комментарий?

2 Solutions collect form web for “Сохранить / выгрузить файл YAML с комментариями в PyYAML”

PyYAML выбрасывает комментарии на очень низком уровне (в Scanner.scan_to_next_token ).

Хотя вы могли бы адаптировать или расширить его для обработки комментариев во всем стеке, это было бы серьезной модификацией. Dump (= излучающий) комментарий кажется более простым и уже обсуждается .

Если вы используете блочный структурированный 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 и dict code состоит из завернутых версий², на которые добавлены комментарии.

¹ Установить с помощью pip install ruamel.yaml . Работает на Python 2.6 / 2.7 / 3.3 +
² ordereddict используется в случае отображения, чтобы сохранить порядок

  • Как вставить код Python в YAML?
  • Может ли PyYAML сбрасывать элементы в не алфавитном порядке?
  • Проверка документа yaml в python
  • Разберите YAML и предположим, что определенный путь всегда является строкой
  • Как получить строковые объекты вместо Unicode от JSON?
  • Статичные страницы Google App Engine для Python 2.5 и т. Д.
  • pyyaml: демпинг без тегов
  • Как получается, что сериализация json намного быстрее, чем сериализация yaml в Python?
  • Python - лучший язык программирования в мире.