TOML配置文件格式,YAML最有力的竞争者
活动地址:CSDN21天学习挑战赛
今天我们一起来学习toml这种简洁的配置文件格式吧。
TOML是在 2013 年发布的配置文件格式。距今虽然有8年历史了,但是之前一直没有在大项目中见过的。我是前段时间在看python的pep规范,无意中看到了这种配置文件格式,稍微了解了一下,才发现现在有很多新的明星项目都喜欢用它来做配置文件。
1、有rust语言的包管理工具cargo;
2、类似于docker的容器工具containerd;
3、go语言很多项目都喜欢用。比如静态网站生成工具Hugo、数据库InfluxDB、GitLab CI。
4、python项目也开始接纳。包管理工具 pip、pipenv和Poetry都是用的TOML,[1]现在连官方的metadata管理也开始支持toml。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nA6uUtbF-1659431944359)(image-20210106151231025.png)]
1. 一个小例子
为什么新项目这么喜欢 TOML 呢? 让我们先来看一个TOML的小例子吧,看完了说不定你就知道了。
[project]name = "spam"version = "2020.0.0"description = "Lovely Spam! Wonderful Spam!"readme = "README.rst"requires-python = ">=3.8"license = {file = "LICENSE.txt"}keywords = ["egg", "bacon", "sausage"]
有没有感觉很熟悉呢?它和ini格式的配置文件几乎一模一样。要知道互联网发展到今天,大多数有影响力的项目都是采用ini这种配置文件格式,如果你之前有接触过ini,切换到toml几乎是0成本。
那为什么不直接用ini呢?因为ini格式支持的数据类型非常少,配置项的值都会被默认当成字符串,如果想表示数字、数组,还需要自己进行额外的解析。
但是在TOML中,数据类型非常丰富:
字符串
注释
数字
布尔值
数组
哈希表
甚至连时间格式都支持
2. 字符串
字符串我们当然不会陌生,但是如果你是从ini格式转过来的,一定要注意字符串值要加引号。
键默认会当成字符串处理,可以加也可以不加。 加引号的键叫引号键(Quoted Key),不加引号的键叫裸键(Bare Key)。
TOML 格式非常灵活,对于灵活的语言,最好的方式是给自己设置规范和纪律,一直用好一种用法,不然很容易学废。官方推荐我们尽量用裸键,当裸键不能正确表达意思的时候,再用引号键。
name = "spam" #OKname_1 = spam #错误"name_2" = "spam" #OK
裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线(A-Za-z0-9_-
),引号键则可以支持特殊字符,甚至是空格。当键中包含特殊字符的时候,使用引号键。
'name@! erf:' = 'spam' # OKname@! erf: = 'spam' # 错误
当字符串为多行字符串时使用三引号,会自动换行:
name = """this is anew line command"""
得到的结果是:
this is anew linecommand
如果不想自动换行,只是想增强可读性,可以使用折行符号\
:
name = """this is a \new line \command"""
得到结果是不换行的:
this is a new line command
3. 数字
如果你都会编程了,数字应该会知道怎么表示。
age1 = 18age2 = -2age3 = +16age4 = 11.2
toml除了支持10进制表示,还支持二进制(0b)、八进制(0o)、十六进制(0x)
age1 = 0b11age2 = 0o12age3 = 0xb
上面的解析结果为:
{'age1': 3, 'age2': 10, 'age3': 11}
4. 布尔
bool1 = truebool2 = false
5. 时间
时间类型是toml的一大特色,因为绝大多数的配置文件格式都是不支持时间类型的。toml 遵循的是 RFC 3339 时间格式,只要照着格式写,解析出来会自动转成编程语言的时间类型。
ts = 2021-01-06 07:30:00ts1 = 2021-01-06 07:30:00.1234time1 = 07:30:00
得到的结果:
{'ts': datetime.datetime(2021, 1, 6, 7, 30), 'ts1': datetime.datetime(2021, 1, 6, 7, 30, 0, 123000),'time1': datetime.time(7, 30)}
6. 数组
数组可以是同类型数据,可以换行,也可以嵌套,和python当中列表简直一模一样。但是要注意,尽量保持元素是同类型的数据。
users = [['iswy', '男'],['you', '女'],]
得到结果:
{'users': [['iswy', '男'], ['you', '女']]}
7. 哈希表
表有点类似于python中的字典:
user = {name='iswy', gender='男'}
得到的结果:
{'user': {'gender': '男', 'name': 'iswy'}}
这种写在key后面的表叫内联表。还有一种用法,类似于ini格式中的section,用于分组管理,暂且把它叫做外联表。比如上面的例子,可以换一种形式,得到的结果是完全一样的。
[user]gender = '男'name = 'iswy'
表支持嵌套,子表可以缩进也可以不缩进:
[user]cat = ['admin', 'normal'][user.student]name='iswy'age=19[user.teacher]name='you'age=32
如果你觉得这种风格你不喜欢,也可以换成下面的风格:
[user]cat = ['admin', 'normal']# studentstudent.name='iswy'student.age=19# teacherteacher.name='you'teacher.age=328
一定要注意,当键包含.
号时,一定要加引号:
site.'x.com' = 'http://x.com'
我个人更倾向于子表嵌套的风格,因为这样的表述看起来更加简洁。
表和数组的配套使用
最后我们要考虑的问题是当有多个用户需要配置,我们要使用表数组进行分组呢?
[[user]][user.student]name='iswy'age=19[user.teacher]name='you'age=328[[user]][user.student]name='iswy2'age=192[user.teacher]name='you2'age=3282
得到的结果:
{'user': [{'student': {'age': 19, 'name': 'iswy'},'teacher': {'age': 328, 'name': 'you'}},{'student': {'age': 192, 'name': 'iswy2'},'teacher': {'age': 3282, 'name': 'you2'}}]}
[^1] https://github.com/toml-lang/toml/wiki#projects-using-toml
TOML配置文件格式,YAML最有力的竞争者相关推荐
- jdk db版本_企业视频会议系统音视频通话EasyRTC-SFU版本研发中更合适的配置文件格式-TOML配置介绍 - TSINGSEE...
在 EasyRTC-SFU 版本的开发过程中,很多配置需要存储在配置文件中.开发人员经常使用的配置文件有 ini.json.xml.yaml 等格式,在综合分析各种文件格式的优劣后,我们最终确认使用 ...
- 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper
目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法&demo yaml demo toml properties HOCON plist(pli ...
- 程序常用配置文件格式介绍
文章目录 1.键值对 2.JSON 2.1 JSON 语法 2.2 JSON 实例 2.3 JSON 解析 3.XML 3.1 XML 语法 3.2 XML 实例 3.3 XML 解析 4.YAML ...
- python 配置文件一般用什么格式_配置文件格式,哪个最强?
1. 配置文件是什么? 配置文件是用于配置计算机程序的参数和初始化设置的文件.如果没有这些配置,程序可能无法执行. 比如现在你要开发一款app, 当部署这款app时,你需要配置它的 host 地址.数 ...
- 配置文件格式详解之终极无惑
文章目录 1.键值对 2.JSON 2.1 JSON 语法 2.2 JSON 实例 2.3 JSON 解析 3.XML 3.1 XML 语法 3.2 XML 实例 3.3 XML 解析 4.YAML ...
- 前端常见配置文件格式及选择
背景 自己撸一个脚手架的时候,需要为脚手架提供一个配置文件,然后发现有好多种配置文件的格式可以选择,比如.json .js或.yml等,一时有点迷茫应该选择哪个格式,查阅一些资料总结此文,以供查阅. ...
- 常用配置文件格式比较
分类 properties josn yaml hocon 轻松支持比较复杂的配置 除了properties 和 json 在复杂的配置文件下,可选择YAML或HOCON YAML: 适用场景:多层级 ...
- Golang学习--TOML配置处理
Golang学习–TOML配置处理 文章目录 Golang学习--TOML配置处理 配置工具的选择 toml的使用 配置的单例模式 配置的更新 POSIX信号 在POSIX.1-1990标准中定义的信 ...
- 【Golang】TOML配置处理
文章目录 概述 配置工具的选择 toml的使用 概述 本篇仅引用部分,更多内容请参见原文 配置工具的选择 但我们又遇到了一个问题,一个项目通常是有很多配置的,比如PHP的php.ini文件.Nginx ...
最新文章
- Python Model : glob 文件路径查找
- javase基础复习攻略《七》
- 1-3 交换变量(算法竞赛入门经典)
- 信息学奥赛一本通 1200:分解因数 | OpenJudge 2.2 1751:分解因数
- 【网络】SSH本地/远程/动态端口转发
- 有100个GMAIL的邀请,需要的来信就可以啦。
- 电脑如何恢复声音_电脑不小心丢失照片如何恢复如初
- 1一10到时的英文单词_1到90的英语单词,1~10的英文单词!
- kubernetes pv回收策略
- 计算机输入法无法输入小写字母,键盘不能输入小写字母
- TechParty Mini+4 logging
- 视频教程-Java高级技术-Java
- 【面试】--【集合容器】
- 阿里云建站费用给大家看下速成美站、企业官网、营销建站价格表
- 《心流》| 精神熵和负熵
- Hazelcast IMDG参考中文版手册-第七章-分布式数据结构
- UI设计的APP标准规范
- 论文翻译3-视频流SR技术分析
- 宏基因组单个样本数据处理流程笔记
- MySQL基础学习笔记