python读取toml配置文件 作者:马育民 • 2025-08-30 08:31 • 阅读:10012 # 介绍 在 Python 中读取 TOML 配置文件非常便捷,主要有两种方式: - 使用 Python 3.11+ 内置的 `tomllib` 模块(推荐) - 使用第三方库 `toml`(兼容低版本 Python) # TOML 配置文件格式 详见链接: https://www.malaoshi.top/show_1GW1lZnjqH1e.html # 准备 TOML 配置文件 文件名:`config.toml` 内容如下: ```toml # 应用基本配置 [app] name = "MyApp" version = "1.0.0" debug = true # 数据库配置 [database] host = "localhost" port = 5432 user = "admin" password = "secret" tables = ["users", "products"] # 嵌套结构 [server] address = "0.0.0.0" port = 8080 timeout = 30.5 limits = { max_connections = 100, max_requests = 1000 } ``` # 使用 Python 3.11+ 内置的 tomllib `tomllib` 是 Python 3.11 新增的标准库,专门用于解析 TOML 文件,无需额外安装依赖。 ``` import tomllib # Python 3.11+ 内置 import os def read_toml_config(file_path: str) -> dict: """ 读取TOML配置文件并返回字典 Args: file_path: TOML文件路径 Returns: 解析后的配置字典 Raises: FileNotFoundError: 文件不存在时抛出 ValueError: 解析失败时抛出 """ if not os.path.exists(file_path): raise FileNotFoundError(f"配置文件不存在: {file_path}") # 注意:tomllib需要以二进制模式('rb')打开文件 with open(file_path, "rb") as f: try: return tomllib.load(f) except tomllib.TOMLDecodeError as e: raise ValueError(f"TOML文件解析错误: {str(e)}") # 使用示例 if __name__ == "__main__": try: config = read_toml_config("config.toml") # 访问配置项(解析后为嵌套字典) print(f"应用名称: {config['app']['name']}") print(f"数据库地址: {config['database']['host']}:{config['database']['port']}") print(f"服务器超时时间: {config['server']['timeout']}秒") print(f"最大连接数: {config['server']['limits']['max_connections']}") print(f"数据库表列表: {config['database']['tables']}") except Exception as e: print(f"错误: {e}") ``` # 使用第三方库 toml(兼容低版本 Python) 如果使用 Python 3.10 及以下版本,可安装第三方库 `toml`(功能与 `tomllib` 类似,但支持文本模式读取)。 ### 1. 安装依赖 ```bash pip install toml ``` ### 2. 读取代码 ``` import toml # 第三方库,需安装 # 读取方式1 def read_toml1(file_path: str) -> dict: """读取TOML配置文件(兼容Python 3.10及以下)""" # toml库支持文本模式('r')打开 with open(file_path, "r", encoding="utf-8") as f: try: return toml.load(f) # 返回dict类型 except toml.TomlDecodeError as e: raise ValueError(f"TOML文件解析错误: {str(e)}") # 读取方式2 def read_toml2(file_path: str) -> dict: """读取TOML配置文件(兼容Python 3.10及以下)""" return toml.load(file_path) # 返回dict类型 # 使用示例 if __name__ == "__main__": try: # 返回dict类型 config = read_toml1("api_keys.txt") print(config) # 访问配置项(与tomllib完全一致) print(f"调试模式: {config['app']['debug']}") print(f"数据库用户: {config['database']['user']}") print(f"服务器地址: {config['server']['address']}:{config['server']['port']}") except Exception as e: print(e) ``` # 关键说明 ### 1.** 数据类型自动转换 ** TOML 中的类型会自动映射为 Python 类型: - 字符串 → `str` - 整数/浮点数 → `int`/`float` - 布尔值 → `bool` - 数组 → `list` - 表(`[table]`)→ `dict` ### 2.** 错误处理 **: - 文件不存在:抛出 `FileNotFoundError` - 格式错误(如语法错误、类型不匹配):抛出解析错误(`TOMLDecodeError`) ### 3.** 版本选择 **: - Python 3.11+:优先使用内置 `tomllib`(无需额外依赖,更安全) - 低版本 Python:使用 `toml` 库(功能兼容,安装简单) ### 4.** 写入 TOML**: - `tomllib` 仅支持读取(无写入功能) - 若需生成 TOML 文件,可使用 `toml` 库的 `toml.dump()` 方法: ```python import toml data = {"app": {"name": "NewApp", "version": "2.0.0"}} with open("new_config.toml", "w") as f: toml.dump(data, f) ``` 原文出处:http://malaoshi.top/show_1GW1licUfbux.html