2014-10-08 72 views
0

在我的Python程序,我有我的字符串:如何让YAML格式的单个列表元素

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 
+0

当我打印你的行时得到这个测试= {“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”}} 文件“”,第1行 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“}} – 2014-10-08 11:51:50

回答

0

尝试:

yaml.dump(test, default_flow_style=False) 
+0

感谢您的答复。但根据我的申请,我只想”[{“ip_address”:“12.0。 0.1“}]”以使此default_flow_style适用。有没有这样做? – user3197309 2014-10-08 12:26:10

+0

我认为在这种情况下,你需要看看这里的例子(对于自定义'表示者')http://pyyaml.org/wiki/PYYAMLDocumentation#Constructorsrepresentersresolvers,你将不得不将自己的IP地址列表包装在自定义类中以区分它来自普通的名单 – Anentropic 2014-10-08 14:27:15

0

如果从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})以及非-F低风格(- ip_address: 12.0.0.1)的。 评论也保存下来。

相关问题