python合并两个属性_在python中合并两个Yaml文件

I have two yaml files as mentioned below

test1.yaml

resources:

server_group_1:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 5] }

policies: [ { get_param: [server_group_types, 5] } ]

server_group_2:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 8] }

policies: [ { get_param: [server_group_types, 8] } ]

output:

check_1:

description: Name of the instance

value: { get_attr: [check_1, vname] }

test2.yaml

resources:

server_group_4:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 4] }

policies: [ { get_param: [server_group_types, 4] } ]

server_group_9:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 7] }

policies: [ { get_param: [server_group_types, 7] } ]

output:

check_6:

description: Name of the instance

value: { get_attr: [check_6, vname] }

I want to merge this two files and create a new output file ,so I use pyyaml the order is getting changed posted same in this link

Can someone help to merge these files without changing the order?

Final yaml should be like this

final.yaml

resources:

server_group_1:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 5] }

policies: [ { get_param: [server_group_types, 5] } ]

server_group_2:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 8] }

policies: [ { get_param: [server_group_types, 8] } ]

server_group_4:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 4] }

policies: [ { get_param: [server_group_types, 4] } ]

server_group_9:

type: OS::Nova::ServerGroup

properties:

name: { get_param: [server_groups, 7] }

policies: [ { get_param: [server_group_types, 7] } ]

output:

check_1:

description: Name of the instance

value: { get_attr: [check_1, vname] }

check_6:

description: Name of the instance

value: { get_attr: [check_6, vname] }

Updated

I am able to merge files using ruamel.yaml ... here goes the sample code to update resources

code:

import ruamel.yaml

yaml = ruamel.yaml.YAML()

#Load the yaml files

with open('/test1.yaml') as fp:

data = yaml.load(fp)

with open('/test2.yaml') as fp:

data1 = yaml.load(fp)

#Add the resources from test2.yaml to test1.yaml resources

for i in data1['resources']:

print i,data1['resources'][i]

data['resources'].update({i:data1['resources'][i]})

#create a new file with merged yaml

yaml.dump(data,file('/tmp/lal.yaml', 'w'))

解决方案

Below sample code worked well for me to merge two yaml file

import ruamel.yaml

yaml = ruamel.yaml.YAML()

#Load the yaml files

with open('/test1.yaml') as fp:

data = yaml.load(fp)

with open('/test2.yaml') as fp:

data1 = yaml.load(fp)

#Add the resources from test2.yaml to test1.yaml resources

for i in data1['resources']:

print i,data1['resources'][i]

data['resources'].update({i:data1['resources'][i]})

#create a new file with merged yaml

yaml.dump(data,file('/tmp/lal.yaml', 'w'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值