提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
配置文件的使用由来已久,从.ini、XML、JSON、YAML再到TOML,语言的表达能力越来越强,同时书写便捷性也在不断提升。 接触到TOML是因为前几种都有其不方便的地方,具体就不解释了。
要写配置文件,关键就是要简单方便,还要不出错,这是TOML吸引我的地方。
废话少说,直接开干!
提示:本文的主要优点在于将toml文件的主要操作变成类,方便调用
TOML[Tom 的(语义)明显、(配置)最小化的语言]
为人而生的配置文件格式。
TOML 旨在成为一个语义明显且易于阅读的最小化配置文件格式。TOML 被设计成可以无歧义地映射为哈希表。TOML 应该能很容易地被解析成各种语言中的数据结构。
具体可访问官方网站https://toml.io/cn/
使用TOML首先要安装他的包,很小巧,很快就完成了。
pip install 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 受到广泛支持
希望对大家有帮助。