TOML介绍
TOML 是一种现代、清晰、易于阅读的配置文件格式,全称是:
Tom’s Obvious, Minimal Language
—— 由 GitHub 联合创始人 Tom Preston-Werner 设计
它的目标是成为 配置文件的通用标准,替代 JSON、YAML、INI 等格式,特别适合用于项目配置、软件设置、依赖管理等场景。
🎯 TOML 的核心特点
特点 | 说明 |
---|---|
✅ 易读易写 | 语法简洁,像 INI,但更强大 |
✅ 强类型支持 | 支持字符串、数字、布尔、日期、数组、表等 |
✅ 无歧义 | 设计目标是“明显、无歧义”,避免 YAML 的陷阱 |
✅ 单向解析 | 只用于配置,不用于数据交换 |
✅ 广泛支持 | 被 Rust、Python、Go、Node.js 等主流语言支持 |
📄 一、TOML 语法示例
# 这是一个 TOML 配置文件示例
# 文件名通常为:config.toml 或 Cargo.toml# 基本键值对
title = "我的项目配置"# 字符串
name = "张三"
email = "zhangsan@example.com"# 布尔值
active = true
debug = false# 数字
port = 8080
version = 1.23# 日期时间(支持 RFC 3339 格式)
created = 2025-04-05T10:30:00Z# 数组
tags = ["web", "api", "dev"]# 内联表(Inline Table)
owner = { name = "李四", role = "管理员" }# 表(Table)—— 类似于 JSON 的对象
[database]
host = "localhost"
port = 5432
username = "db_user"
password = "secret"# 嵌套表
[database.pool]
max_connections = 20
timeout = 30# 数组 of 表(常用于依赖管理)
[[dependencies]]
name = "flask"
version = "2.3.2"[[dependencies]]
name = "requests"
version = "2.31.0"
🔍 二、TOML 的核心语法结构
结构 | 示例 | 说明 |
---|---|---|
键值对 | key = "value" | 基本单位 |
注释 | # 这是注释 | 只支持行注释 |
字符串 | "hello" 或 'world' | 支持多行 """...""" |
数组 | arr = [1, 2, 3] | 支持嵌套 |
表(Table) | [section] | 类似于 JSON 的对象 |
嵌套表 | [a.b] | 表示 a 下的 b |
数组 of 表 | [[array]] | 每个 [[ ]] 表示一个新元素 |
🆚 三、TOML vs JSON vs YAML
格式 | 优点 | 缺点 |
---|---|---|
TOML | 易读、有注释、强类型、无歧义 | 不适合复杂数据结构 |
JSON | 通用、机器友好 | 不能写注释、语法严格 |
YAML | 灵活、缩进简洁 | 容易出错(如缩进、特殊字符) |
示例:同一配置的三种写法
TOML
[server]
host = "localhost"
port = 8080
JSON
{"server": {"host": "localhost","port": 8080}
}
YAML
server:host: localhostport: 8080
✅ TOML 更适合人类编辑配置文件
🌍 四、TOML 的实际应用
项目 | 用途 |
---|---|
Rust (Cargo) | Cargo.toml 定义项目依赖和元信息 |
Python (Poetry, Hatch) | pyproject.toml 替代 setup.py |
Go (Go modules) | 部分工具使用 TOML 配置 |
Deno | 配置文件支持 TOML |
Homebrew (macOS) | 公式文件使用 TOML |
systemd | 新版本支持 TOML 配置 |
✅ 五、如何在 Python 中使用 TOML?
安装:
pip install toml # 或 tomlkit(更高级)
读取 TOML 文件:
import toml# 读取文件
with open("config.toml", "r", encoding="utf-8") as f:config = toml.load(f)print(config["database"]["host"]) # 输出: localhost
写入 TOML 文件:
data = {"title": "测试","database": {"host": "localhost","port": 5432}
}with open("output.toml", "w", encoding="utf-8") as f:toml.dump(data, f)
✅ 六、总结
项目 | 说明 |
---|---|
TOML 是什么 | 一种现代配置文件格式 |
设计目标 | 明显、最小、易读 |
适用场景 | 项目配置、依赖管理、服务设置 |
优点 | 有注释、类型丰富、无歧义 |
缺点 | 不适合复杂嵌套数据 |
推荐使用 | 替代 JSON/YAML 做配置文件 |
🎯 一句话记住:
TOML 是“写给人看的配置文件”,
它不像 JSON 那样冰冷,也不像 YAML 那样容易出错,
是现代项目的理想选择。