在Python中使用toml

刷完这60个标准库模块,成为Python骨灰级玩家

简介

配置文件并不是什么新鲜玩意,Python标准库也支持多种配置文件格式,比如Windows中最常见的ini格式;网络传输最常用的json,甚至xml文件。

toml文件也是配置文件的一种,具有更强的可读性,在其官网的介绍中,对这种格式的描述是A config file format for humans

Python3.11的标准库中添加了专门处理这种文件的模块,即tomllib模块。下面介绍toml的基本规范。

toml中,支持的数据类型有字符串、整数、浮点数、日期时间;支持的数据结构有数组、表格以及数组表格。

牛刀小试

多说无益,直接上代码,例如对于下面这段toml

# 在toml中#表示注释
name = "TOML"
info = """
在TOML中,
支持多行字符串
"""
pyVersion = 3.11
date = 2022-12-26

在Python中打开后

import tomllib

with open("test.toml", "rb") as f:
    data = tomllib.load(f)

from pprint import pprint
pprint(data)

输出结果如下


{‘date’: datetime.date(2022, 12, 26),
‘info’: ‘在TOML中,\n支持多行字符串\n’,
‘name’: ‘TOML’,
‘pyVersion’: 3.11}


可见,tomllibtoml文件自动改成了字典格式,且识别出了日期时间、多行字符串、单行字符串以及浮点型数字。

字符串

toml标准中,支持两种字符串格式,分别用双引号和单引号表示。

其中,双引号包裹的字符串为基本字符串,内部支持常用的转义字符

\b\t\n\f\r"\\
退格tab换行换页回车引号斜杠

此外,\uXXXX可表示码号为XXXX的unicode字符。

用单引号包裹的字符串为字面量字符串,不支持转义字符,所以字面量字符串中无法输入单引号。

三个引号可以表示多行字符串,三个双引号对表示的是多行基本字符串;三个单引号对括起来的字符串为多行字面量字符串。

数值

tomllib中,数值可用下划线连接,这一点非常便捷,例如299_732_458,从而可以方便地划分位数,具有极强的可读性。

此外,还支持十六进制、八进制和二进制整数

进制示例
十六进制0xDEADBEEF, 0xdeadbeef, 0xdead_beef
八进制0o01234567
二进制0b11010110

浮点数用E或者e表示指数,示例如下

# 小数
c = 2.99_732e8
b = 0.53E-10
me = 9.1e-31

toml支持布尔类型,分别用小写的truefalse表示。

最简单的日期时间如下

d = 2022-02-22
t = 2:22:22.222
dt = 2022-02-22 2:22:22.222

数据结构

列表

对于Pythoner而言,toml中的列表和字典毫无理解难度,下面的示例如果不说的话,当作Python代码是没有任何问题的。

lst1 = [ 1, 2, 3 ]
lst2 = [ "r", "g", "b" ]
lst3 = [ 1, 2, 3, 'r', 'g', 'b']
# 列表可以换行
lst4 = [ [ 1, 2 ], 
    ["r", "g", "b"] ]
lst5 = [ "所有的", '字符串', """是相同的""", '''类型''' ]

字典

toml中,字典被称为内联表,和Python相比,唯一的区别是用=替代了:

dct = { name = "微小冷", 
    url = "https://tinycool.blog.csdn.net/" }

内联表在toml中的标准定义如下

[dct]
name = "微小冷"
url = "https://tinycool.blog.csdn.net/"

表还支持通过点索引进行嵌套,例如下面的表

[dog."tater.man"]
type.name = "pug"

等价于下列json的结构

{ "dog": { "tater.man": { "type": { "name": "pug" } } } }

字典列表

如果想定义一个字典的列表,可写成如下形式


[[products]]
name = “Hammer”
sku = 738594937

[[products]] # 数组里的空表

[[products]]
name = “Nail”
sku = 284758393

color = “gray”


等价于

{
  "products": [
    { "name": "Hammer", "sku": 738594937 },
    { },
    { "name": "Nail", "sku": 284758393, "color": "gray" }
  ]
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值