Подтвердить что ты не робот

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

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

# The following key opens a door
key: value

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

4b9b3361

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

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