如何解决如何在Python中解析嵌套的Yaml和格式/并置Yaml键的wrt值
下面是我的YAML文件
---
- PROJECT: project01
CD_APPLICATION:
- NAME: cd_application
CD_DEPLOYMENT:
GROUP: cd_group_deployment_ci
- API:
BASE_URL: http://api-internal.mywebsite.com/apiinternal/index.php
KEY: some_random_key
GTM_ID: alpha1123numric
APP:
Name: my_app_name
ENV: staging
KEY: base64:username/somerandomekey
DEBUG: false
URL: https://stage2.mywebsite.com
LANGUAGES: en,ar
DB:
CONNECTION:
HOST: 111.111.111.111
PORT: 3306
DATABASE: database_name
USERNAME: username
PASSWORD: password
STATS:
STATS_DB_HOST: 112.112.112.112
STATS_DB_PORT: 3306
STATS_DB_DATABASE: database_name
STATS_DB_USERNAME: username
STATS_DB_PASSWORD: password
我想要下面的输出
['/PROJECT','project01'],['/CD_APPLICATION/NAME','cd_application'],['/CD_APPLICATION/CD_DEPLOYMENT/GROUP','cd_group_deployment_ci'],['/CD_APPLICATION/API/BASE_URL','http://api-internal.mywebsite.com/apiinternal/index.php'],['/CD_APPLICATION/API/KEY','some_random_key'],['/CD_APPLICATION/API/GTM_ID','alpha1123numric'],['/CD_APPLICATION/API/APP/Name','my_app_name'],['/CD_APPLICATION/API/APP/ENV','staging'],['/CD_APPLICATION/API/APP/KEY','base64:username/somerandomekey'],['/CD_APPLICATION/API/APP/DEBUG',False],['/CD_APPLICATION/API/APP/URL','https://stage2.mywebsite.com'],['/CD_APPLICATION/API/APP/LANGUAGES','en,ar'],['/CD_APPLICATION/API/APP/DB/CONNECTION/HOST','111.111.111.111'],['/CD_APPLICATION/API/APP/DB/CONNECTION/PORT',3306],['/CD_APPLICATION/API/APP/DB/DATABASE','database_name'],['/CD_APPLICATION/API/APP/DB/USERNAME','username'],['/CD_APPLICATION/API/APP/DB/PASSWORD','password'],['/CD_APPLICATION/API/APP/DB/STATS/STATS_DB_HOST','112.112.112.112'],['/CD_APPLICATION/API/APP/DB/STATS/STATS_DB_PORT',['/CD_APPLICATION/API/APP/DB/STATS/STATS_DB_DATABASE',['/CD_APPLICATION/API/APP/DB/STATS/STATS_DB_USERNAME',['/CD_APPLICATION/API/APP/DB/STATS/STATS_DB_PASSWORD','password']
我有一个仅从嵌套yaml中获取值的脚本。
您可以通过传递yaml文档来调用此脚本
下面是脚本
#!/usr/bin/python
import boto3
import sys
import yaml
import json
from six import iteritems
from collections import defaultdict
NAMESPACE = ""
def load_yml(file_path):
with open(file_path,'r') as f:
variables = yaml.safe_load(f)
return variables
dict_variables = load_yml(sys.argv[1])
def unpack_list_dict(dict_var,prev_key=""):
for key,value in dict_var.items():
if type(value) == str or \
type(value) == int or \
type(value) == str or \
type(value) == bool or \
type(value) == float:
NAMESPACE_1 = NAMESPACE + "/" + key
final_list.append([NAMESPACE_1,value])
else:
prev_key += "/" + key
if type(value) == list:
for l in value:
if type(l) == str or \
type(l) == int or \
type(l) == str or \
type(l) == bool or \
type(l) == float:
final_list.append([NAMESPACE_1,l])
else:
prev_key += "/" + key
unpack_list_dict(l,prev_key=prev_key)
if type(value) == dict:
for dict_key,dict_value in value.items():
if type(dict_value) == str or \
type(dict_value) == int or \
type(dict_value) == str or \
type(dict_value) == bool or \
type(dict_value) == float:
NAMESPACE_2 = NAMESPACE + "/" + dict_key
final_list.append([NAMESPACE_2,dict_value])
else:
prev_key += "/" + dict_key
unpack_list_dict(dict_value,prev_key=prev_key)
return final_list
for node in dict_variables:
final_list = []
last_output = unpack_list_dict(node)
print(last_output)
注意:请忽略“ prev_key”变量。我尝试使用此键存储以前的键(连接的字符串)。
下面是上面脚本的输出
['PROJECT',['NAME',['GROUP',['BASE_URL',['KEY',['GTM_ID',['Name',['ENV',['DEBUG',['URL',['LANGUAGES',['HOST',['PORT',['DATABASE',['USERNAME',['PASSWORD',['STATS_DB_HOST',['STATS_DB_PORT',['STATS_DB_DATABASE',['STATS_DB_USERNAME',['STATS_DB_PASSWORD','password']]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。