在DTCloud中支持toml文件

扶程星云 2023-02-07 17:39:58
在项目实施中需要一个统一的撰写配置文件规范而且配置文件较为通用且易读,有没有解决方案呢?答案是有的,目前介绍一种配置文件规范 「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)

 

...全文
132 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,系统阐述了基于Simulink的永磁同步电机(PMSM)多参数辨识方法,重点采用粒子群优化算法(PSO)实现对电机关键内部参数的高精度辨识。研究构建了完整的PMSM控制系统仿真模型,结合智能优化算法,解决了传统参数辨识精度低、收敛慢的问题,有效提升了电流环控制的动态性能与稳态精度。该方法特别适用于对控制精度和响应速度要求较高的工业应用场景,如高性能伺服系统、电动汽车驱动系统等,具有较强的工程实用价值和科研参考意义。文提供了完整的Simulink仿真模型与配套代码,确保了研究内容的可复现性和实践操作性。; 适合人群:具备电机控制、自动化或电气工程等相关专业背景,熟悉MATLAB/Simulink仿真环境,从事电机驱动系统研发、控制算法设计或相关领域科研工作的工程师及研究生,尤其适合工作1-5年、希望深入理解先进参数辨识技术的研发人员。; 使用场景及目标:①开展高精度PMSM控制系统的设计与参数辨识研究;②学习并掌握PSO等智能优化算法在电机系统参数辨识的具体实现与调优技巧;③完成学术论文复现、科研项目验证、毕业设计或工程原型开发,提升对现代电机控制核心技术的理解与应用能力。; 阅读建议:建议读者结合提供的Simulink模型与源代码进行动手实践,按照文档逻辑逐步搭建与调试仿真系统,重点关注PSO算法与电机模型的交互机制、目标函数设计及参数收敛过程,通过对比不同工况下的辨识结果,深入理解算法性能与控制精度之间的内在联系。

4,956

社区成员

发帖
与我相关
我的任务
社区描述
DTCloud是一套基于Pthon+Go开源商业应用程序.主要面向建筑工程行业,物联网行业,数字化行业,打造的企业信息一体化的解决方案。
物联网 企业社区
社区管理员
  • 昆山一百计算机有限公司
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧