Python中Toml配置文件的操作詳解
TOML是一種用于配置文件的輕量級(jí)、易讀的數(shù)據(jù)序列化格式。
由Tom Preston-Werner創(chuàng)建,旨在成為一種簡(jiǎn)單直觀的配置文件語(yǔ)言,適用于任何編程語(yǔ)言環(huán)境。
TOML支持多種數(shù)據(jù)類型,包括字符串、整數(shù)、浮點(diǎn)數(shù)、布爾值、日期時(shí)間、數(shù)組和嵌套表等等。
TOML通常用于配置應(yīng)用程序或軟件的設(shè)置,例如配置數(shù)據(jù)庫(kù)連接信息、網(wǎng)絡(luò)參數(shù)、日志級(jí)別等。
在許多編程語(yǔ)言中,都有第三方庫(kù)或原生支持,用于解析和生成TOML格式的配置文件。
Python從3.11版本開始,原生支持TOML的解析,不需要再安裝第三方的庫(kù)。
1. 基本類型
配置項(xiàng)的值在TOML中也像在JSON中一樣,是可以有類型的。
它說(shuō)支持的基本類型主要有布爾值,數(shù)值(整數(shù),浮點(diǎn)數(shù)),字符串和日期等幾種。
1.1. 布爾值
python中的TOML模塊可以加載toml格式的字符串,或者toml文件的文件流。
# -*- coding: utf-8 -*-
import tomllib
# 加載toml文件
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("bool_var1 = ", data["bool_var1"])
print("bool_var2 = ", data["bool_var2"])
# 運(yùn)行結(jié)果
bool_var1 = False
bool_var2 = Truetoml文件示例:sample.toml
bool_var1 = false bool_var2 = true
1.2. 數(shù)值
數(shù)值類型分為整數(shù)和浮點(diǎn)數(shù)兩種。
整型除了10進(jìn)制,也可以用16進(jìn)制,8進(jìn)制和2進(jìn)制。
# 10進(jìn)制 int_var1 = 99 int_var2 = -17 int_var3 = 1_234_000 # 16進(jìn)制,大小寫都可以 hex_var1 = 0xDE hex_var2 = 0xde # 8進(jìn)制 oct_var = 0o666 # 2進(jìn)制 bin_var = 0b11010110
解析之后,會(huì)自動(dòng)轉(zhuǎn)換成10進(jìn)制。
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("int_var1 = ", data["int_var1"])
print("int_var2 = ", data["int_var2"])
print("int_var3 = ", data["int_var3"])
print("hex_var1 = ", data["hex_var1"])
print("hex_var2 = ", data["hex_var2"])
print("oct_var = ", data["oct_var"])
print("bin_var = ", data["bin_var"])
# 運(yùn)行結(jié)果
int_var1 = 99
int_var2 = -17
int_var3 = 1234000
hex_var1 = 222
hex_var2 = 222
oct_var = 438
bin_var = 214浮點(diǎn)型的各種配置示例:
float_var1 = 3.1415 float_var2 = -0.01 float_var3 = 5e+22 float_var4 = -2E-2 float_var5 = 6.626e-34
解析示例:各種格式的float寫法都可以解析。
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("float_var1 = ", data["float_var1"])
print("float_var2 = ", data["float_var2"])
print("float_var3 = ", data["float_var3"])
print("float_var4 = ", data["float_var4"])
print("float_var5 = ", data["float_var5"])
# 運(yùn)行結(jié)果
float_var1 = 3.1415
float_var2 = -0.01
float_var3 = 5e+22
float_var4 = -0.02
float_var5 = 6.626e-341.3. 字符串
對(duì)于字符串類型的配置項(xiàng),支持單行和多行字符串。
配置文件示例:
str_single = "abcdefg" str_multi = """ab cd ef """
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("str_single = ", data["str_single"])
print("str_multi = ", data["str_multi"])
# 運(yùn)行結(jié)果
str_single = abcdefg
str_multi = ab
cd
ef字符串的配置除了單行和多行以外,還有單引號(hào)和雙引號(hào)的區(qū)別。
- 單引號(hào)字符串:原樣顯示字符串內(nèi)容
- 雙引號(hào)字符串:解析字符串中的轉(zhuǎn)義符
str_var1 = "ab\tcd\nef" str_var2 = 'ab\tcd\nef'
解析之后:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("str_var1 = ", data["str_var1"])
print("str_var2 = ", data["str_var2"])
# 運(yùn)行結(jié)果
str_var1 = ab cd
ef
str_var2 = ab\tcd\nef1.4. 日期
最后一個(gè)常用的基本類型是日期類型。
配置示例:
date_var1 = 2023-09-13T10:08:22 date_var2 = 2023-09-13 date_var3 = 10:08:22
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
s = "date_var1 = {} (type: {})".format(data["date_var1"],
type(data["date_var1"]))
print(s)
s = "date_var2 = {} (type: {})".format(data["date_var2"],
type(data["date_var2"]))
print(s)
s = "date_var3 = {} (type: {})".format(data["date_var3"],
type(data["date_var3"]))
print(s)
# 運(yùn)行結(jié)果
date_var1 = 2023-09-13 10:08:22 (type: <class 'datetime.datetime'>)
date_var2 = 2023-09-13 (type: <class 'datetime.date'>)
date_var3 = 10:08:22 (type: <class 'datetime.time'>)日期類型可以是完整的年月日時(shí)分秒,也可以只有年月日或時(shí)分秒。
2. 復(fù)合類型
復(fù)合類型主要是列表和字典。
2.1. 列表
列表中的元素可以是上面的介紹的任意基本類型。
配置示例:(列表中元素的數(shù)據(jù)類型可以不同,也可以是一個(gè)列表)
lst_var1 = [1, 3.14, "str", 2023-09-13T10:08:22] lst_var2 = [[1, 2], ["abc", "def"]]
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("lst_var1 = ", data["lst_var1"])
print("lst_var2 = ", data["lst_var2"])
# 運(yùn)行結(jié)果
lst_var1 = [1,
3.14,
'str',
datetime.datetime(2023, 9, 13, 10, 8, 22)]
lst_var2 = [[1, 2], ['abc', 'def']]2.2. 字典
配置示例:(字典中值的數(shù)據(jù)類型可以不同,也可以是一個(gè)字典)
[dict_var1] key1 = 1 key2 = 3.14 key3 = "str" key4 = 2023-09-13T10:08:22 [dict_var1.sub_dict] key = "val"
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("dict_var1 = ", data["dict_var1"])
# 運(yùn)行結(jié)果
dict_var1 = {
'key1': 1,
'key2': 3.14,
'key3': 'str',
'key4': datetime.datetime(2023, 9, 13, 10, 8, 22),
'sub_dict': {'key': 'val'}
}3. 類型組合
如果是寫代碼的話,列表中嵌入字典或者字典中嵌入列表都非常簡(jiǎn)單,
但是,配置文件中定義這種復(fù)雜的結(jié)構(gòu)就沒那么容易了。
TOML提供了簡(jiǎn)單的語(yǔ)法來(lái)實(shí)現(xiàn)復(fù)雜類型之間的組合。
3.1. 列表中的字典
配置示例:
[[student]] name = "aaa" age = 15 score = 100 [[student]] name = "bbb" age = 14 score = 89 [[student]] name = "ccc" age = 17 score = 98
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("students = ", data["student"])
# 運(yùn)行結(jié)果
students = [
{'name': 'aaa', 'age': 15, 'score': 100},
{'name': 'bbb', 'age': 14, 'score': 89},
{'name': 'ccc', 'age': 17, 'score': 98},
]3.2. 字典中的列表
字典中嵌入列表比較簡(jiǎn)單:
[teacher] name = "abc" classes = ["一班", "二班", "三班"]
解析示例:
with open("./sample.toml", "rb") as f:
data = tomllib.load(f)
print("teacher = ", data["teacher"])
# 運(yùn)行結(jié)果
teacher = {
'name': 'abc',
'classes': ['一班', '二班', '三班']
}4. TOML的優(yōu)勢(shì)
與常用的INI,JSON和YAML等格式的配置文件相比,TOML誕生的較晚,所以借鑒了它們的優(yōu)勢(shì),采用更加簡(jiǎn)單直觀的語(yǔ)法和縮進(jìn)格式,使得文件非常易讀和易于編輯。
而且TOML的配置項(xiàng)格式更接近腳本語(yǔ)言,寫起來(lái)就像代碼中定義變量一樣。
與傳統(tǒng)的INI配置相比,TOML在數(shù)據(jù)類型支持以及語(yǔ)法靈活性方面遠(yuǎn)遠(yuǎn)勝出;
與JSON配置相比,TOML在簡(jiǎn)潔性方面遠(yuǎn)遠(yuǎn)勝出;
與YAML配置相比,TOML在簡(jiǎn)潔性以及語(yǔ)法靈活性方面遠(yuǎn)遠(yuǎn)勝出。
正是因?yàn)樗姆N種優(yōu)勢(shì),現(xiàn)在流行的golang和rust語(yǔ)言的項(xiàng)目中,很多都以TOML作為配置文件。
到此這篇關(guān)于Python中Toml配置文件的操作詳解的文章就介紹到這了,更多相關(guān)Python Toml配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Django 頁(yè)面緩存的cache_key是如何生成的
這篇文章主要介紹了Django 頁(yè)面緩存的cache_key是如何生成的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題
這篇文章主要介紹了Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Python使用numpy模塊實(shí)現(xiàn)矩陣和列表的連接操作方法
今天小編就為大家分享一篇Python使用numpy模塊實(shí)現(xiàn)矩陣和列表的連接操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python中aiohttp模塊的簡(jiǎn)單運(yùn)用方式
這篇文章主要介紹了Python中aiohttp模塊的簡(jiǎn)單運(yùn)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Python爬蟲使用瀏覽器cookies:browsercookie過(guò)程解析
這篇文章主要介紹了Python爬蟲使用瀏覽器cookies:browsercookie,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
python 自動(dòng)刷新網(wǎng)頁(yè)的兩種方法
這篇文章主要介紹了python 自動(dòng)刷新網(wǎng)頁(yè)的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

