2017-06-27 23 views
1

到YAML我有以下YAML文件:写参数和值使用Python

heat_template_version: 2015-10-15 
parameters: 

    image: 
    type: string 
    label: Image name or ID 
    default: CirrOS 
    private_network_id: 
    type: string 
    label: Private network name or ID 
    floating_ip: 
    type: string 

我要添加键 - >默认private_network_id和floating_ip(如果默认情况下不存在),并默认密钥我想添加值(我从用户那里得到)

我该如何在Python中实现这个功能?

产生的YAML应该是这样的:

heat_template_version: 2015-10-15 
parameters: 

    image: 
    type: string 
    label: Image name or ID 
    default: CirrOS 
    private_network_id: 
    type: string 
    label: Private network name or ID 
    default: <private_network_id> 
    floating_ip: 
    type: string 
    default: <floating_ip> 

回答

1

对于这种往返你应该做使用ruamel.yaml的(声明:我是包的作者)。

假设你输入一个文件input.yaml和下面的程序:

from ruamel.yaml import YAML 
from pathlib import Path 

yaml = YAML() 
path = Path('input.yaml') 

data = yaml.load(path) 
parameters = data['parameters'] 
# replace assigned values with user input 
parameters['private_network_id']['default'] = '<private_network_id>' 
parameters['floating_ip']['default'] = '<floating_ip>' 
yaml.dump(data, path) 

后,您的文件将精确匹配你所要求的输出。

请注意,YAML文件中的注释以及密钥排序会自动保留(不受YAML规范保证)。

如果你还在使用Python2(其标准库中没有pathlib)使用from ruamel.std.pathlib import Path或重写​​和.dump()线,适当地打开,旧样式,文件对象。例如。

with open('input.yaml', 'w') as fp: 
    yaml.dump(data, fp) 
+0

谢谢...它工作 –