前不久发的文章了解学习了protobuf:Python Protobuf入门
最近在配置算子的时候,一直用着一种配置文件,而且有着自己奇奇怪怪的语法,起初没想多以为是公司自己独创的语言。后来经提醒发现是TOML语言,由于没怎么做过开发,之前从来没听说过这个语言,趁此机会了解学习一下。
TOML(Tom's Obvious, Minimal Language),简单说就是类似YAML、JSON的一种配置文件语法。它由 Tom Preston-Werner 创建,他是 GitHub 的创始人之一。从名字可以看出,真的取的很随意,我个人甚至觉得TOML都可以理解成是Tom's Language(hhhhhh)
TOML 的主要特点大概可以概括为:
相比于JSON的一堆括号,以及YAML头疼的缩进,TOML确实很友好,写起来会舒服很多。
废话不多说先举个例子:
title = "示例"
[owner]
name = "张三"
dob = 1990-01-01T12:34:56Z # 日期和时间
[database]
server = "192.168.1.1"
ports = [8001, 8002, 8003]
connection_max = 5000
enabled = true
[servers]
[servers.alpha]
ip = "10.0.0.1"
dc = "北京"
[servers.beta]
ip = "10.0.0.2"
dc = "上海"
[[person]]
name = "张三"
age = 30
[[person]]
name = "李四"
age = 25
[[person]]
name = "王五"
可以使用在线toml转json:https://www.convertjson.com/toml-to-json.htm
如果转换成JSON格式的话,大概是这样:
{
"title": "示例",
"owner": {
"name": "张三",
"dob": "1990-01-01T12:34:56.000Z"
},
"database": {
"server": "192.168.1.1",
"ports": [
8001,
8002,
8003
],
"connection_max": 5000,
"enabled": true
},
"servers": {
"alpha": {
"ip": "10.0.0.1",
"dc": "北京"
},
"beta": {
"ip": "10.0.0.2",
"dc": "上海"
}
},
"person": [
{
"name": "张三",
"age": 30
},
{
"name": "李四",
"age": 25
},
{
"name": "王五"
}
]
}
TOML 支持多种数据类型和结构,这使得它非常适合在各种应用程序中作为配置文件格式使用。下面将详细介绍 TOML 的语法和特性:
TOML 支持以下基本数据类型:
name = "张三"
age = 30
pi = 3.14159
true
或 false
。例如:enabled = true
dob = 1990-01-01
start_time = 12:34:56
timestamp = 2023-10-26T12:34:56
timestamp = 2022-01-01T12:34:56Z
或 timestamp = 2023-10-26T12:34:56+08:00
,参考RFC 3339 格式的日期时刻TOML 支持数组,即一系列相同类型的值。数组用方括号([ ])表示,值之间用逗号分隔。例如:
numbers = [1, 2, 3, 4, 5]
names = ["张三", "李四", "王五"]
表是 TOML 中的键值对集合,类似于 JSON 中的对象。表用方括号([ ])表示,并使用点号(.)表示层级关系。例如:
[database]
server = "192.168.1.1"
port = 3306
[database.credentials]
username = "user"
password = "password"
这将创建一个名为 database
的表,其中包含 server
和 port
键,以及一个名为 credentials
的子表,其中包含 username
和 password
键。
对应成JSON就是:
{
"database": {
"server": "192.168.1.1",
"port": 3306,
"credentials": {
"username": "user",
"password": "password"
}
}
}
内联表是一种简洁的表示表的方法,适用于简单的键值对集合。内联表用花括号({ })表示,键值对之间用逗号分隔。例如:
point = { x = 1, y = 2 }
对应的JSON是:
{
"point": {
"x": 1,
"y": 2
}
}
数组表表示一系列具有相同结构的表。数组表使用两个方括号([[ ]])表示。例如:
[[person]]
name = "张三"
age = 30
[[person]]
name = "李四"
age = 25
这将创建一个名为 person
的数组表,其中包含两个具有相同结构(name
和 age
键)的表。
对应的JSON是:
{
"person": [
{
"name": "张三",
"age": 30
},
{
"name": "李四",
"age": 25
}
]
}
TOML 支持单行注释。注释以井号(#)开头,直到行尾,跟python很像。例如:
# 这是一个注释
name = "张三" # 这也是一个注释
TOML 支持多行字符串,这在配置文件中表示较长的文本时非常有用。多行字符串使用三个双引号(""")表示。例如:
long_text = """
啊吧啊吧啊吧啊吧
啊吧啊吧
啊
"""
TOML 中的整数和浮点数支持多种格式。例如,整数可以用十进制、八进制、十六进制和二进制表示:
decimal = 42
octal = 0o52
hexadecimal = 0x2A
binary = 0b101010
浮点数支持科学记数法表示:
scientific = 1.2e3
TOML 中的键名可以使用以下格式:
key_name
"Key Name with Spaces"
TOML 文件应使用 UTF-8 编码,扩展名应使用 .toml
扩展名
在Python中,可以使用第三方库toml
来解析和生成TOML文件。如果按照了anaconda,一般都会自带,如果没有的话可以使用:
pip install toml
conda install toml (conda使用)
然后,可以使用以下代码来解析和生成TOML文件:
import toml
# 解析TOML文件
with open("test.toml", "r", encoding="utf-8") as file:
config = toml.load(file)
print(config)
# 修改配置
config["database"]["enabled"] = False
# 生成新的TOML文件
with open("new_test.toml", "w") as file:
toml.dump(config, file)
这里注意,读取toml文件后,会产生一个字典变量。接下来,只需要按照python的字典操作修改和保存文件即可。
https://github.com/LongTengDao/TOML/blob/龙腾道-译/toml-v1.0.0.md
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。