【TOML配置文件】配置文件我用TOML!人性化,少出错!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

配置文件我用TOML!人性化,少出错!

  • 前言
  • 一、TOML是什么东东?
  • 二、如何使用TOML?
    • 1.安装TOML包
    • 2.TOML调用方法
  • 总结


前言

配置文件的使用由来已久,从.ini、XML、JSON、YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升。 接触到TOML是因为前几种都有其不方便的地方,具体就不解释了。

要写配置文件,关键就是要简单方便,还要不出错,这是TOML吸引我的地方。

废话少说,直接开干!


提示:本文的主要优点在于将toml文件的主要操作变成类,方便调用

一、TOML是什么东东?

TOML[Tom 的(语义)明显、(配置)最小化的语言]
为人而生的配置文件格式。
TOML 旨在成为一个语义明显且易于阅读的最小化配置文件格式。TOML 被设计成可以无歧义地映射为哈希表。TOML 应该能很容易地被解析成各种语言中的数据结构。
具体可访问官方网站https://toml.io/cn/
【TOML配置文件】配置文件我用TOML!人性化,少出错!_第1张图片

二、如何使用TOML?

1.安装TOML包

使用TOML首先要安装他的包,很小巧,很快就完成了。

pip install toml

2.TOML调用方法

将TOML做成一个类,方便调用,引用方法见main函数下的语句。

# -*- coding: utf-8 -*-
# 文件名:toml_config.py
# 首次使用请先:pip install toml
import toml
class Toml_Config:
    '''读写toml对象,实际就是个dict'''
    def __init__(self,toml_fileanme):
        self.t_dict = dict() # 创建空字典
        self.toml_file_path = toml_fileanme

    def update(self, t_data):
        # 给toml文件添加配置
        self.t_dict.update(t_data)
        return self.t_dict

    def write(self,t_data):
        # 写入到toml文件
        with open(self.toml_file_path, "w", encoding="utf-8") as fs:
            toml.dump(t_data, fs)

    def read(self):
        # 读取toml文件
        with open(self.toml_file_path, "r", encoding="utf-8") as fs:
            t_data = toml.load(fs)
        return t_data
    
    def read_str(self,s_data):
        # 从字符串中解析TOML,返回一个字典对象或类的实例对象
        t_data = toml.loads(s_data, _dict=dict)
        return t_data
    
    def read_dict(self,dict):
        # 将字典对象格式化成toml字符串
        t_data = toml.dumps(dict)
        return t_data
 
if __name__ == '__main__':
    
    # 引用示范
    import os
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    toml_fileanme = "config.toml"
    toml_file_path = os.path.join(BASE_DIR, toml_fileanme)
    
    # 读写toml对象
    # 假定将本文件保存为toml_config.py,则在同目录引用时需要增加下面这行语句
    # from toml_configimport Toml_Config
    t = Toml_Config(toml_file_path)
    if 1:
        # 读取toml文件
        data = t.read()
        print('\n读取toml文件:\n',data)
   
    if 1:
        # 从dict读取为toml对象
        indicators = {'macd': {'fastperiod':12, 'slowperiod':26, 'signalperiod':9}}
        data = t.read_dict(indicators)
        print('\n从dict读取为toml对象:\n',data)
    
    if 1:
        # 更新toml数据
        print('\n更新toml数据前:\n',data)
        indicators = {'macd': {'fastperiod':48, 'slowperiod':104, 'signalperiod':36}}
        data = t.read_dict(indicators)
        data2 = t.update(indicators)
        print('\n更新toml数据后:\n',data2)

    if 1:
        # 从字符串读取为toml对象
        s_data = """
        [mysql]
        host     = "127.0.0.1"
        user     = "root"
        port     = 3306
        database = "test"
        """
        data = t.read_str(s_data)
        print('\n从字符串读取为toml对象:\n',data)
    
    if 1:
        # 将数据写入toml文件
        indicators = {
                        'macd': {'fastperiod':12, 'slowperiod':26, 'signalperiod':9},
                        'macd4': {'fastperiod':48, 'slowperiod':104, 'signalperiod':36},
                        'rsi6':6,'rsi14':14,'rsi24':24,
                        'kdj': {'N':9,'M1':3,'M2':3},
                        'cci': {'timeperiod': 14}
                    }
        
        t.write(indicators)
        data = t.read()
        print('\n数据写入toml文件:\n',data)
    

执行结果如下:

读取toml文件:
 {'rsi6': 6, 'rsi14': 14, 'rsi24': 24, 'macd': {'fastperiod': 12, 'slowperiod': 26, 'signalperiod': 9}, 'macd4': {'fastperiod': 48, 'slowperiod': 104, 'signalperiod': 36}, 'kdj': {'N': 9, 'M1': 3, 'M2': 3}, 'cci': {'timeperiod': 14}}

从dict读取为toml对象:
 [macd]
fastperiod = 12
slowperiod = 26
signalperiod = 9


更新toml数据前:
 [macd]
fastperiod = 12
slowperiod = 26
signalperiod = 9


更新toml数据后:
 {'macd': {'fastperiod': 48, 'slowperiod': 104, 'signalperiod': 36}}

从字符串读取为toml对象:
 {'mysql': {'host': '127.0.0.1', 'user': 'root', 'port': 3306, 'database': 'test'}}

数据写入toml文件:
 {'rsi6': 6, 'rsi14': 14, 'rsi24': 24, 'macd': {'fastperiod': 12, 'slowperiod': 26, 'signalperiod': 9}, 'macd4': {'fastperiod': 48, 'slowperiod': 104, 'signalperiod': 36}, 'kdj': {'N': 9, 'M1': 3, 'M2': 3}, 'cci': {'timeperiod': 14}}

总结

写配置文件,本来算不上什么大事儿,但做过项目的人知道,这玩意儿还真马虎不得。一个易识读、易修改的配置文件,在开发初期尤为重要。所以我推荐TOML,而且这家伙官网还给了中文手册,给点个赞!

以下摘自官网:
TOML 以人为先
TOML 旨在成为一个最小化配置文件格式,具有如下优点:

  • 语义明显易于阅读
  • 能无歧义地映射为哈希表
  • 易于解析成各种语言中的数据结构

TOML 具备实用的原生类型

  • 键/值对
  • 数组
  • 内联表
  • 表数组
  • 整数 & 浮点数
  • 布尔值
  • 日期 & 时刻,带可选的时区偏移

TOML 受到广泛支持

  • TOML 已经拥有大多数当今使用的最流行的编程语言的实现:C、C#、C++、Clojure、Dart、Elixir、Erlang、Go、Haskell、Java、Javascript、Lua、Objective-C、Perl、PHP、Python、Ruby、Swift、Scala……以及更多。

希望对大家有帮助。

你可能感兴趣的:(Python经验池,python,开发语言)