吐槽
先吐槽一下其他几个配置文件。
- ini:表达能力不够,比如不能表达列表等结构;没有官方注释符号,虽然一般以分号作为注释符号。
- json:没有官方注释符号,虽然某些第三方包提供了注释结构。
- yaml:语法比较复杂,可读性不太高。
toml 简介
TOML是前GitHub CEO, Tom Preston-Werner,于2013年创建的语言,其目标是成为一个小规模的易于使用的语义化配置文件格式。TOML被设计为可以无二义性的转换为一个哈希表(Hash table)。
- 官方中文文档
- qbit 下面使用的第三方解析包是:https://pypi.org/project/toml/
- 可以考虑使用基于 Rust 实现的 rtoml
config.toml
# 输入目录
SrcRoot = 'D:\test\input'
# 输出目录
DstRoot = 'D:\test\output'
t.py
#encoding: utf-8
#author: walker
#date: 2018-12-11
#summary: 读取 UTF-8/UTF-8-BOM 格式的 toml 配置文件
import os
import sys
import toml
SrcRoot = r''
DstRoot = r''
def ReadConfig():
r""" 读取配置文件 """
global SrcRoot, DstRoot
cfgFile = 'config.toml'
if not os.path.exists(cfgFile):
input(cfgFile + ' not found')
sys.exit(-1)
with open(cfgFile, mode='rb') as f:
content = f.read()
if content.startswith(b'\xef\xbb\xbf'): # 去掉 utf8 bom 头
content = content[3:]
dic = toml.loads(content.decode('utf8'))
SrcRoot = dic['SrcRoot'].strip()
if not os.path.exists(SrcRoot):
print('Error: not exists %s' % SrcRoot)
sys.exit(-1)
print('SrcRoot: %s' % SrcRoot)
DstRoot = dic['DstRoot'].strip()
if not os.path.exists(DstRoot):
print('Error: not exists %s' % DstRoot)
sys.exit(-1)
print('DstRoot: %s' % DstRoot)
print('Read config.toml successed!')
if __name__ == '__main__':
ReadConfig()
cmd
D:\Python3Project\test>python3 t.py
SrcRoot: D:\test\input
DstRoot: D:\test\output
Read config.toml successed!
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。