Использование update
не сработает, потому что значение для ключа
organizations
является последовательностью и загружается как list
-подобный тип
CommentedSeq
. Так что append
-ing будет правильным решением.
То, что это не работает, немного неясно, так как вы не предоставляете этот ввод
что вы начинаете, ни код, используемый при выполнении append
, который получает
AttributeError
на CommentedMap
.
Вот что работает, если у вас есть одна организация и добавлена другая:
import sys
import ruamel.yaml
yaml_str = """\
version: x.x.x
is_enterprise: 'true'
license: secrets/license.txt
organizations:
- description: xyz
name: abc
"""
org_data = dict(
description='pqr',
name='def',
)
yaml = ruamel.yaml.YAML()
yaml.indent(mapping=4, sequence=4, offset=2)
cur_yaml = yaml.load(yaml_str)
cur_yaml['organizations'].append(org_data)
yaml.dump(cur_yaml, sys.stdout)
Это дает:
version: x.x.x
is_enterprise: 'true'
license: secrets/license.txt
organizations:
- description: xyz
name: abc
- description: pqr
name: def
Если у вас еще нет организаций, убедитесь, что ваш ввод YAML выглядит следующим образом:
version: x.x.x
is_enterprise: 'true'
license: secrets/license.txt
organizations: []
В старых версиях Python порядок ключей в добавленных вами данных не гарантируется. к
Примените этот порядок и к более старой версии:
org_data = ruamel.yaml.comments.CommentedMap((('description', 'pqr'), ('name', 'def')))
или
org_data = ruamel.yaml.comments.CommentedMap()
org_data['description'] = 'pqr'
org_data['name'] = 'def'