用配置文件里面的参数值替换yaml模板中的变量值【python】
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/9/20 15:44# @Site : # @File : VarsubYaml.py# @Software: PyCharm""""""import sys, osfrom contextlib import ExitStackprofileList = {}def PropValue(envfile): with open(envfile) as profile: new_profile = profile.readlines() print(new_profile) for line in new_profile: line_key = line.strip().split("=", 1)[0]; profileList[line_key] = line.strip().split("=", 1)[1]def EnvReplaceYaml(yamlfile, newyamlfile): try: with ExitStack() as stack: yml_file = stack.enter_context(open(yamlfile,'r+')) yml_output = stack.enter_context(open(newyamlfile,'w')) yml_file_lines = yml_file.readlines() for line in yml_file_lines: new_line = line if (new_line.find('$$PLACEHOLDER$$') > 0): env_list = new_line.split(':') env_name = env_list[0].strip() replacement = "" if env_name in profileList.keys(): replacement = profileList[env_name]; new_line = new_line.replace('$$PLACEHOLDER$$', replacement) yml_output.write(new_line) except IOError as e: print("Error: " + format(str(e))) raiseif __name__ == "__main__": PropValue('env') EnvReplaceYaml('temp.yaml', 'newtemap.yaml')
temp.yaml
---applications:- name: $$NAME$$-$$DATETIME$$-$$VERSION$$ memory: 2048m instances: 1 disk_quota: 2048m################## ================================================== env: APP_ID: "$$PLACEHOLDER$$" TABLE_KEY: "$$PLACEHOLDER$$" SECURITY: "$$PLACEHOLDER$$" KEY: "$$PLACEHOLDER$$"
env
APP_ID=11111111111 TABLE_KEY=22222222222 SECURITY=3333333333333 KEY=6777777777777
原文中的nested已经在python3中弃用了,改为ExitStack
参考:https://www.cnblogs.com/husbandmen/p/8783232.html