2014-10-08 22 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)的。 評論也保存下來。

相關問題