Конвертировать Python словарь в yaml - PullRequest
0 голосов
/ 11 октября 2018

У меня есть словарь, я преобразовываю словарь в yaml, используя модуль yaml в python.Но Yaml не конвертирует должным образом.

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?

1 Ответ

0 голосов
/ 11 октября 2018

По умолчанию 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...