Если вы используете блочную структуру 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
"""
yaml = ruamel.yaml.YAML() # defaults to round-trip if no parameters given
code = yaml.load(yaml_str)
code['name']['given'] = 'Bob'
yaml.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
используется в случае отображения, чтобы сохранить порядок