Вы не можете форсировать кавычки в YAML, цитируя части ваших данных, как вы.Поскольку кавычки заставляют дампер применять к скаляру кавычки (то есть больше не могут использовать простые скаляры, как для других строковых значений в вашем файле yaml).
Вам необходимо создать тип, который будет сбрасываться с кавычками.Проще всего это сделать с помощью ruamel.yaml
(отказ от ответственности: я являюсь автором этой улучшенной версии PyYAML, поддерживающей YAML 1.2, поддерживающей сохранение комментариев и цитат и т. Д.),
import sys
import ruamel.yaml
from ruamel.yaml.scalarstring import DoubleQuotedScalarString as dq
yaml = ruamel.yaml.YAML()
yaml.indent(sequence=4, offset=2)
foo = {
'instance_type': 'test',
'hostname': dq("testhost"),
'name': 'foo',
'my_list': [
{'foo': 'test', 'bar': 'test2'},
{'foo': 'test3', 'bar': 'test4'}],
'hello': 'world',
}
yaml.dump(foo, sys.stdout)
, которая дает:
instance_type: test
hostname: "testhost"
name: foo
my_list:
- foo: test
bar: test2
- foo: test3
bar: test4
hello: world
Вы также можете легко загрузить и вывести этот вывод, генерируя точно такой же вывод:
from ruamel.yaml.compat import StringIO
buf = StringIO()
yaml.dump(foo, buf)
yaml.preserve_quotes = True
data = yaml.load(buf.getvalue())
yaml.dump(data, sys.stdout)