У меня есть словарь, я конвертирую словарь в yaml, используя модуль yaml в python. Но Ямл некорректно конвертируется.
output_data = {
'resources': [{
'type': 'compute.v1.instance',
'name': 'vm-created-by-deployment-manager',
'properties': {
'disks': [{
'deviceName': '$disks_deviceName$',
'boot': '$disks_boot$',
'initializeParams': {
'sourceImage': '$disks_initializeParams_sourceImage$'
},
'autoDelete': '$disks_autoDelete$',
'type': '$disks_type$'
}],
'machineType': '$machineType$',
'zone': '$zone$',
'networkInterfaces': [{
'network': '$networkInterfaces_network$'
}]
}
}]
}
Я пытался :
import yaml
f = open('meta.yaml', 'w+')
yaml.dump(output_data, f, allow_unicode=True)
Я получаю файл meta.yaml следующего содержания:
resources:
- name: vm-created-by-deployment-manager
properties:
disks:
- autoDelete: $disks_autoDelete$
boot: $disks_boot$
deviceName: $disks_deviceName$
initializeParams: {sourceImage: $disks_initializeParams_sourceImage$}
type: $disks_type$
machineType: $machineType$
networkInterfaces:
- {network: $networkInterfaces_network$}
zone: $zone$
type: compute.v1.instance
Здесь {sourceImage: $disks_initializeParams_sourceImage$} и {network: $networkInterfaces_network$} становятся похожими на dictionary. Это означает внутренний
содержимое словаря не конвертируется в yaml.
Я тоже пробовал,
output_data = eval(json.dumps(output_data))
ff = open('meta.yaml', 'w+')
yaml.dump(output_data, ff, allow_unicode=True)
Но получение того же содержимого файла yaml.
Как я могу преобразовать полный словарь в yaml в Python?
@floydya: Спасибо .. сработало. Напишите, пожалуйста, ответ. Чтобы я мог принять и проголосовать за ваш ответ.






По умолчанию PyYAML выбирает стиль коллекции в зависимости от того, есть ли у нее вложенные коллекции. Если в коллекции есть вложенные коллекции, ей будет назначен стиль блока. В противном случае он будет иметь стиль потока.
Если вы хотите, чтобы коллекции всегда сериализовались в блочном стиле, установите для параметра default_flow_style функции dump () значение False. Например,
> `print(yaml.dump(yaml.load(document), default_flow_style=False))`
>> Result: `a: 1 b: c: 3 d: 4`
Документация: https://pyyaml.org/wiki/PyYAMLDocumentation
yaml.dump(output_data, ff, allow_unicode=True, default_flow_style=False)