如何在Python中解析嵌套的Yaml和格式/并置Yaml键的wrt值

如何解决如何在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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-