Как получить один элемент списка в формате yaml

В моей программе на Python у меня есть строка:

test = {"Controller_node1_external_port": {"properties": {"fixed_ips": [{"ip_address": "12.0.0.1"}],"network_id": {"get_param": ["ex_net_map_param",{"get_param": "ex_net_param"}]}},"type": "OS::Neutron::Port"}}

yaml.dump(test) дает мне вывод:

Controller_node1_external_port:
  properties:
    fixed_ips:
    - {ip_address: 12.0.0.1}
    network_id:
      get_param:
      - ex_net_map_param
      - {get_param: ex_net_param}
  type: OS::Neutron::Port

Но я хочу строку ip_address как - ip_address: 12.0.0.1 (значит без цветочных брекетов)

Желаемый выход:

Controller_node1_external_port:
  properties:
    fixed_ips:
    - ip_address: 12.0.0.1
    network_id:
      get_param:
      - ex_net_map_param
      - {get_param: ex_net_param}
  type: OS::Neutron::Port

2 ответа

Решение

Пытаться:

yaml.dump(test, default_flow_style=False)

Если вы начинаете с файла YAML, вы можете просто использовать ruamel.yaml (заявление об отказе: я являюсь автором этого обновления PyYAML) и выполнить:

import ruamel.yaml

yaml_in = """
Controller_node1_external_port:
  properties:
    fixed_ips:
    - ip_address: XXX           # <<< update this
      network_id:
        get_param:
        - ex_net_map_param
        - {get_param: ex_net_param}
  type: OS::Neutron::Port
"""

config = ruamel.yaml.load(yaml_in, ruamel.yaml.RoundTripLoader)
config['Controller_node1_external_port']['properties']['fixed_ips'][0]\
    ['ip_address'] = '12.0.0.1'
print ruamel.yaml.dump(config,
                 Dumper=ruamel.yaml.RoundTripDumper)

и получить в качестве вывода:

Controller_node1_external_port:
  properties:
    fixed_ips:
    - ip_address: 12.0.0.1      # <<< update this
    network_id:
      get_param:
      - ex_net_map_param
      - {get_param: ex_net_param}
  type: OS::Neutron::Port

сохранение отображений / словарей в стиле потока (- {get_param: ex_net_param}) а также стиль без потока (- ip_address: 12.0.0.1) те. Комментарий также сохранился.

Другие вопросы по тегам