在我的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
答案 0 :(得分:0)
尝试:
yaml.dump(test, default_flow_style=False)
答案 1 :(得分: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}
)以及非流式样式(- ip_address: 12.0.0.1
)。
评论也被保留了。