最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3實現讀取TOML配置文件

 更新時間:2026年05月22日 08:24:00   作者:曾阿倫  
在 Python 項目開發(fā)中,配置管理是核心環(huán)節(jié),TOML是一種專為配置文件設計的極簡格式,相比ini/json/yaml具有語法清晰、支持注釋和層級結構等優(yōu)勢,下面我們就來看看如何使用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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于python的Tkinter編寫登陸注冊界面

    基于python的Tkinter編寫登陸注冊界面

    這篇文章主要為大家詳細介紹了基于python的Tkinter編寫登陸注冊界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 詳解修改Anaconda中的Jupyter Notebook默認工作路徑的三種方式

    詳解修改Anaconda中的Jupyter Notebook默認工作路徑的三種方式

    這篇文章主要介紹了詳解修改Anaconda中的Jupyter Notebook默認工作路徑的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python Flask 搭建微信小程序后臺詳解

    Python Flask 搭建微信小程序后臺詳解

    這篇文章主要介紹了Python Flask 搭建微信小程序后臺,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • python簡單區(qū)塊鏈模擬詳解

    python簡單區(qū)塊鏈模擬詳解

    這篇文章主要介紹了python簡單區(qū)塊鏈模擬詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 對python3中pathlib庫的Path類的使用詳解

    對python3中pathlib庫的Path類的使用詳解

    今天小編就為大家分享一篇對python3中pathlib庫的Path類的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python3使用tracemalloc實現追蹤mmap內存變化

    Python3使用tracemalloc實現追蹤mmap內存變化

    這篇文章主要為大家詳細介紹了在Python3中如何使用tracemalloc實現追蹤mmap內存變化,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-03-03
  • Python3 常用數據標準化方法詳解

    Python3 常用數據標準化方法詳解

    這篇文章主要介紹了Python3 常用數據標準化方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python解析xml文件實例分享

    python解析xml文件實例分享

    這篇文章主要介紹了python解析XML文件的方法,大家參考使用吧
    2013-12-12
  • matplotlib.subplot()畫子圖并共享y坐標軸的方法

    matplotlib.subplot()畫子圖并共享y坐標軸的方法

    Matplotlib的可以把很多張圖畫到一個顯示界面,本文主要介紹matplotlib.subplot()畫子圖并共享y坐標軸的方法,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Python利用正則表達式從字符串提取數字

    Python利用正則表達式從字符串提取數字

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關于Python利用正則表達式從字符串提取數字的相關資料,需要的朋友可以參考下
    2022-02-02

最新評論

左权县| 峨山| 竹溪县| 平原县| 安仁县| 进贤县| 若尔盖县| 桐柏县| 报价| 双牌县| 岢岚县| 小金县| 金平| 广灵县| 双鸭山市| 水富县| 天全县| 百色市| 阿坝县| 新邵县| 玉林市| 五寨县| 大庆市| 宁夏| 广东省| 远安县| 土默特右旗| 汕头市| 苏尼特左旗| 响水县| 介休市| 白朗县| 临猗县| 项城市| 新蔡县| 大洼县| 昌江| 策勒县| 保山市| 德兴市| 寿阳县|