活动地址: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最有力的竞争者相关推荐

  1. jdk db版本_企业视频会议系统音视频通话EasyRTC-SFU版本研发中更合适的配置文件格式-TOML配置介绍 - TSINGSEE...

    在 EasyRTC-SFU 版本的开发过程中,很多配置需要存储在配置文件中.开发人员经常使用的配置文件有 ini.json.xml.yaml 等格式,在综合分析各种文件格式的优劣后,我们最终确认使用 ...

  2. 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper

    目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法&demo yaml demo toml properties HOCON plist(pli ...

  3. 程序常用配置文件格式介绍

    文章目录 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 ...

  4. python 配置文件一般用什么格式_配置文件格式,哪个最强?

    1. 配置文件是什么? 配置文件是用于配置计算机程序的参数和初始化设置的文件.如果没有这些配置,程序可能无法执行. 比如现在你要开发一款app, 当部署这款app时,你需要配置它的 host 地址.数 ...

  5. 配置文件格式详解之终极无惑

    文章目录 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 ...

  6. 前端常见配置文件格式及选择

    背景 自己撸一个脚手架的时候,需要为脚手架提供一个配置文件,然后发现有好多种配置文件的格式可以选择,比如.json .js或.yml等,一时有点迷茫应该选择哪个格式,查阅一些资料总结此文,以供查阅. ...

  7. 常用配置文件格式比较

    分类 properties josn yaml hocon 轻松支持比较复杂的配置 除了properties 和 json 在复杂的配置文件下,可选择YAML或HOCON YAML: 适用场景:多层级 ...

  8. Golang学习--TOML配置处理

    Golang学习–TOML配置处理 文章目录 Golang学习--TOML配置处理 配置工具的选择 toml的使用 配置的单例模式 配置的更新 POSIX信号 在POSIX.1-1990标准中定义的信 ...

  9. 【Golang】TOML配置处理

    文章目录 概述 配置工具的选择 toml的使用 概述 本篇仅引用部分,更多内容请参见原文 配置工具的选择 但我们又遇到了一个问题,一个项目通常是有很多配置的,比如PHP的php.ini文件.Nginx ...

最新文章

  1. Python Model : glob 文件路径查找
  2. javase基础复习攻略《七》
  3. 1-3 交换变量(算法竞赛入门经典)
  4. 信息学奥赛一本通 1200:分解因数 | OpenJudge 2.2 1751:分解因数
  5. 【网络】SSH本地/远程/动态端口转发
  6. 有100个GMAIL的邀请,需要的来信就可以啦。
  7. 电脑如何恢复声音_电脑不小心丢失照片如何恢复如初
  8. 1一10到时的英文单词_1到90的英语单词,1~10的英文单词!
  9. kubernetes pv回收策略
  10. 计算机输入法无法输入小写字母,键盘不能输入小写字母
  11. TechParty Mini+4 logging
  12. 视频教程-Java高级技术-Java
  13. 【面试】--【集合容器】
  14. 阿里云建站费用给大家看下速成美站、企业官网、营销建站价格表
  15. 《心流》| 精神熵和负熵
  16. Hazelcast IMDG参考中文版手册-第七章-分布式数据结构
  17. UI设计的APP标准规范
  18. 论文翻译3-视频流SR技术分析
  19. 宏基因组单个样本数据处理流程笔记
  20. MySQL基础学习笔记

热门文章

  1. Oracle各个版本的区别
  2. 判断大端模式和小端模式
  3. 证照之星软件怎么样?证照之星怎么换背景色
  4. 游戏蓝牙耳机什么牌子好?游戏蓝牙耳机性价比品牌
  5. c语言python是什么意思_c语言和python的区别是什么
  6. 分享几点我的读书心得
  7. Ubuntu20.04重新安装旧版本VS Code
  8. 小程序中confirm-type设置键盘的确认按钮
  9. 最近用OpenCV做的自动识别靶子环数的问题
  10. 阿里三面 Android 研发岗,竟然挂在了性能优化上…