Python3實現讀取TOML配置文件
前言
在 Python 項目開發(fā)中,配置管理是核心環(huán)節(jié)。傳統(tǒng)的 ini 不支持復雜結構、json 無法寫注釋、yaml 縮進嚴格易報錯,而 TOML 作為專為配置文件設計的格式,憑借語法清晰、支持注釋、層級結構、類型安全等優(yōu)勢,成為 Python 項目的首選配置格式。
Python 3.11+ 已內置 TOML 解析器,低版本也可通過第三方庫快速支持。
一、TOML 配置文件簡介
TOML(Tom’s Obvious, Minimal Language)是極簡、語義化的配置格式,核心優(yōu)勢:
- 語法和
ini相似,極易讀寫 - 支持單行注釋(
#開頭) - 天然支持層級結構(表 / 嵌套表)
- 支持字符串、數字、布爾、數組、時間等數據類型
- 無縮進依賴,不會因格式錯誤導致解析失敗
- 被 Poetry、Pydantic、Rust 等主流工具 / 語言廣泛采用
標準 TOML 示例:
# 項目通用配置 [project] name = "python-toml-demo" version = "1.0.0" debug = true port = 8000 # 數據庫配置 [database] host = "127.0.0.1" port = 3306 username = "root" password = "root123" db_name = "test" timeout = 30 # 日志配置 [log] level = "INFO" file_path = "./logs/app.log" max_size = 10485760
二、Python 解析 TOML 的兩種方式
1、Python 3.11+ 內置庫
Python 3.11 及以上版本自帶 ****tomllib,無需安裝任何依賴:
import tomllib
2、低版本 Python(≤3.10)第三方庫
低版本使用 toml 庫,先安裝:
pip install toml
import toml
本文以 Python 3.11+ 內置 tomllib 為主,同時兼容低版本寫法。
三、Python3 讀取 TOML 文件
1. 創(chuàng)建配置文件
在項目根目錄新建 config.toml,寫入測試配置:
# config.toml [app] name = "TOML測試項目" env = "development" port = 9000 [mysql] host = "localhost" user = "root" password = "123456" database = "demo"
2. 讀取并解析 TOML
# read_toml_demo.py
import tomllib
# 1. 讀取配置文件
with open("config.toml", "rb") as f:
config = tomllib.load(f)
# 2. 直接使用配置
print("項目名稱:", config["app"]["name"])
print("運行環(huán)境:", config["app"]["env"])
print("MySQL 地址:", config["mysql"]["host"])
3. 運行結果
項目名稱: TOML測試項目
運行環(huán)境: development
MySQL 地址: localhost
4. 低版本 Python 兼容寫法
import toml
config = toml.load("config.toml")
print(config["app"]["name"])
四、支持所有 TOML 數據類型
TOML 支持豐富的數據類型,Python 可直接解析為對應類型:
TOML 配置
# 基本類型 str_val = "字符串" int_val = 100 float_val = 3.14 bool_val = true # 數組 array_val = [1, 2, 3, 4] # 層級表 [server] ip = "192.168.1.100" port = 8080
Python 讀取
with open("config.toml", "rb") as f:
config = tomllib.load(f)
print(type(config["bool_val"])) # <class 'bool'>
print(type(config["array_val"])) # <class 'list'>
print(config["server"]["ip"]) # 192.168.1.100
五、全局配置工具類
封裝一個配置類,實現:
- 全局唯一配置實例
- 自動加載配置
- 優(yōu)雅獲取配置項
- 異常捕獲
完整封裝代碼
# config.py
import tomllib
from pathlib import Path
class TomlConfig:
"""TOML 配置文件管理類"""
_instance = None
_config = None
def __new__(cls, config_path="config.toml"):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._load_config(config_path)
return cls._instance
@classmethod
def _load_config(cls, config_path):
"""加載配置文件"""
path = Path(config_path)
if not path.exists():
raise FileNotFoundError(f"配置文件不存在:{config_path}")
try:
with open(path, "rb") as f:
cls._config = tomllib.load(f)
except tomllib.TOMLDecodeError as e:
raise ValueError(f"TOML 格式錯誤:{e}")
def get(self, key: str, default=None):
"""
獲取配置(支持層級寫法:app.name)
示例:get("app.port")
"""
keys = key.split(".")
data = self._config
for k in keys:
if isinstance(data, dict) and k in data:
data = data[k]
else:
return default
return data
# 初始化全局配置
config = TomlConfig()
使用方式
from config import config
# 直接獲取配置
app_name = config.get("app.name")
mysql_host = config.get("mysql.host", "127.0.0.1") # 帶默認值
print(app_name)
print(mysql_host)
六、常見問題與解決方案
1. 報錯:ModuleNotFoundError: No module named 'tomllib'
原因:Python 版本 < 3.11
解決:安裝第三方庫
pip install toml
并將代碼改為:
import toml
config = toml.load("config.toml")
2. 報錯:TOMLDecodeError: Invalid statement
原因:TOML 語法錯誤(如字符串未加引號、括號不匹配)
解決:檢查配置文件格式,TOML 字符串必須用雙引號。
3. 如何讀取多級嵌套 TOML?
TOML:
[redis.cluster.node1] host = "127.0.0.1" port = 6379
Python:
config.get("redis.cluster.node1.host")
到此這篇關于Python3實現讀取TOML配置文件的文章就介紹到這了,更多相關Python讀取TOML配置文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解修改Anaconda中的Jupyter Notebook默認工作路徑的三種方式
這篇文章主要介紹了詳解修改Anaconda中的Jupyter Notebook默認工作路徑的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
Python3使用tracemalloc實現追蹤mmap內存變化
這篇文章主要為大家詳細介紹了在Python3中如何使用tracemalloc實現追蹤mmap內存變化,文中的示例代碼講解詳細,感興趣的可以了解一下2023-03-03
matplotlib.subplot()畫子圖并共享y坐標軸的方法
Matplotlib的可以把很多張圖畫到一個顯示界面,本文主要介紹matplotlib.subplot()畫子圖并共享y坐標軸的方法,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05

