python3 讀取配置檔案中的引數值替換yaml檔案中的佔位符(變數)
阿新 • • 發佈:2020-12-10
技術標籤:Python
要替換內容的yaml檔案:temp.yaml
也就是要將
"$$PLACEHOLDER$$"
進行替換。
---
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
python程式碼
import sys, os
from contextlib import ExitStack
profileList = {}
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)))
raise
if __name__ == "__main__":
PropValue('env')
EnvReplaceYaml('temp.yaml', 'newtemap.yaml')