1934
社区成员
在项目实施中需要一个统一的撰写配置文件规范而且配置文件较为通用且易读,有没有解决方案呢?答案是有的,目前介绍一种配置文件规范 「TOML 语言」.本工具专用于对项目config下的config.toml文件操作,填补DTCloud原读取.conf文件若干不足之处,期望大部分项目配置文件通过这个工具读取。 原则本工具只供读取配置文件使用.
使用方法:TomlConfig.read("list.inCloud", "defInfo222") ,传入要读取的地址,多级地址用.分隔。
公用代码
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# DTCloud360
# QQ:35350428
# 邮件:35350428@qq.com
# 手机:13584935775
# 作者:Nebula Fortune(扶程星云)
# 公司网址: http://www.dtcloud360.com/
# Copyright 中亿丰数字科技集团有限公司
# 日期:2023/2/7 10:16
# 文件: config_public.py
# 备注:
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
def get_config_by_path(pathStr, configStr):
"""读取传入的配置文件,读取匹配路径的值
传入要读取的配置文件和字典路径,在配置文件中找到该路径的值,返回该值,如果没有该值或读取出错,则返回None,多重路径通过.分隔
args:
pathStr:要解析的路径,多重路径用.分隔,比如 list.inCloud
configStr:读到的config文件内容
return:
value_str: 读取到的值
"""
value_str = configStr
path_list = pathStr.split('.')
for key in path_list:
if key in value_str:
value_str = value_str[key]
else:
return None
return value_str
专用代码
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# DTCloud360
# QQ:35350428
# 邮件:35350428@qq.com
# 手机:13584935775
# 作者:Nebula Fortune(扶程星云)
# 公司网址: http://www.dtcloud360.com/
# Copyright 中亿丰数字科技集团有限公司
# 日期:2023/2/7 10:16
# 文件: toml_config.py
# 备注:
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
import logging
import os.path
import warnings
import toml
from config_public import get_config_by_path
# pip install toml - i https://pypi.douban.com/simple
_logger = logging.getLogger(__name__)
class TomlConfig:
"""toml配置文件读取工具
在项目实施中需要一个统一的撰写配置文件规范而且配置文件较为通用且易读,有没有解决方案呢?答案是有的,目前介绍一种配置文件规范 「TOML 语言」.
本工具专用于对项目config下的config.toml文件操作,填补DTCloud原读取.conf文件若干不足之处,期望大部分项目配置文件通过这个工具读取。
原则本工具只供读取配置文件使用.
"""
projectPath = os.path.abspath(os.path.join(os.getcwd(), "../..")) # 当前项目目录
configFullPath = os.path.join(projectPath, "config") # 当前配置项目配置文件目录
configFileFullPath = os.path.join(configFullPath, "config.toml") # 当前配置文件全路径
@classmethod
def read(cls, pathStr, defStr):
"""读取配置文件里面的值
传入要读取的路径和默认值,在配置文件中找到该路径的值,返回该值,如果没有该值或读取出错,则返回默认值,多重路径通过.分隔
args:
pathStr:要解析的路径,多重路径用.分隔,比如 list.inCloud
defStr:默认返回值,如果不成功,则返回默认值
returns:
value: 读取到的值
err: 出错信息。如果err为None,则是真正读到了值,否则返回的值就是默认的值。
Raises:
yaml.YAMLError: toml读取异常
路径不存在
文件不存在
未读到值
"""
err = None
if not os.path.exists(TomlConfig.configFullPath): # 判断路径是否存在
err = f'路径{TomlConfig.configFullPath}不存在.'
return defStr, err
if not os.path.isfile(TomlConfig.configFileFullPath): # 判断文件是否存在
err = f'文件{TomlConfig.configFileFullPath}不存在'
return defStr, err
config = toml.load(TomlConfig.configFileFullPath)
value = get_config_by_path(pathStr, config)
if value is None:
value = defStr
err = "未读到值"
return value, err
@classmethod
def new(cls, data):
"""谨慎使用:会清空原文件所有数据,不做任何检查,直接插入纪录!"""
warnings.warn("谨慎使用:会清空原文件所有数据,不做任何检查,直接插入纪录!", DeprecationWarning)
err = None
if not os.path.exists(TomlConfig.configFullPath): # 判断路径是否存在
try:
os.makedirs(TomlConfig.configFullPath)
except Exception as e:
err = f'路径{TomlConfig.configFullPath}创建失败, err:{e}'
return err
with open(TomlConfig.configFileFullPath, 'w', encoding='utf-8') as f:
r = toml.dump(data, f)
return r
if __name__ == '__main__':
date = {
"name": "Tom",
"age": 23,
"sex": "man",
'list': {'inCloud': [1, 2, 3]}
}
TomlConfig.new(date)
print(TomlConfig.read("name", "defInfo222"))
# print(configFullPath)