IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python 解析外部json配置文件自动生成变量,并获取变量的变量名 -> 正文阅读

[Python知识库]python 解析外部json配置文件自动生成变量,并获取变量的变量名

标题

一、问题以及目标

程序开发过程中我们会有很多变量,为了产品化部署以及方便使用,我们通常需要将变量抽离成一个单独的配置文件,之后我们通过对配置文件进行修改,在不修改程序的情况下实现我们想要的目标。
我们很多时候需要在配置文件中添加参数,为了使得在配置文件中添加参数之后,解析配置文件的时候不需要修改,就能直接将新加的参数创建出对应的变量,开发一下工具达到这个目标。

二、

1、解析配置文件
配置示例

{
	"name": "charater", 
	"sex": "man"
}

2、通过字典自动创建变量

	# 传入字典, 以字典的键作为变量名, value作为变量值,通过递归自动创建所有变量
	@classmethod
    def createVariableByJson(cls, conf: dict):
        '''
        auto create variable through parse of config json file
        :param conf: dict, json parse of config file
        :return: None
        '''
        if type(conf) == dict:
            globals().update(conf)
            for k, v in conf.items():
                if type(v) == dict:
                    logger.debug(f"{k} : {v}")
                    cls.createVariableByJson(v)
                else:
                    logger.debug("value of type is {}, value is {}, no need to callback value".format(type(v), v))
        else:
            return None


# 导入需要的模块
import json
from loguru import logger
import inspect
import traceback

class Config:
    def __init__(self, file):
        '''
        pars configuration file and create variables through parsing results
        :param file: configuration file path
        '''
        self.file = file

    def readJsonConfig(self, mode: str = 'r', encoding: str = 'utf-8'):
        '''
        reading config file and convert string to dictionary
        :param mode: How to operate the configuration file
        :param encoding: Encoding format of configuration file
        :return: json or dict config
        '''
        with open(self.file, mode=mode, encoding=encoding) as f:
            s = f.read()
            try:
                conf = json.loads(s)
                return conf
            except json.decoder.JSONDecodeError as e:
                logger.debug("{} config json: \n{}".format(traceback.format_exc(), s))
                conf = eval(s)
                return conf
            finally:
                logger.debug('SUCCESS PARSING CONFIG FILE')
	# 通过解析出来的dict,递归创建所有变量
    @classmethod
    def createVariableByJson(cls, conf: dict):
        '''
        auto create variable through parse of config json file
        :param conf: dict, json parse of config file
        :return: None
        '''
        if type(conf) == dict:
            globals().update(conf)
            for k, v in conf.items():
                if type(v) == dict:
                    logger.debug(f"{k} : {v}")
                    cls.createVariableByJson(v)
                else:
                    logger.debug("value of type is {}, value is {}, no need to callback value".format(type(v), v))
        else:
            return None
	# 传入变量,获取变量名称以及变量的值
    @classmethod
    def get_variable_name(cls, variable):
        '''
        Pass in a variable as a parameter to get the name and value of the variable
        :param variable: Pass in a variable
        :return: [[var_name1, var_val1], [var_name1, var_val1]]
        >>> var = 'abc'
        >>> tup = get_variable_name(var)
        >>> tup
        [['var', 'abc']]
        '''
        logger.debug(locals())
        callers_local_vars = inspect.currentframe().f_back.f_locals.items()
        return [[var_name, var_val] for var_name, var_val in callers_local_vars if var_val is variable]

    def __call__(self, *args, **kwargs):
        '''
        read configuration and create variable
        :param args:
        :param kwargs:
        :return: None
        '''
        conf = self.readJsonConfig(*args, **kwargs)
        self.createVariableByJson(conf)

三、执行

file_name = "conf.json"
Config(file_name)()
print(Config.get_variable_name(promt_record_df_file_name))
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:20:55  更:2022-04-01 23:22:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:35:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码