00

先看结论

  • TOML 是一种将键和值无歧义地映射为哈希表的文本配置格式,区分大小写,并要求文件采用有效的 UTF-8 编码。
  • 用文本编辑器打开 .toml 文件即可查看和编辑。Windows 可从编辑器的“打开”命令选取文件;Mac 应使用纯文本模式;手机需选择能打开 UTF-8 文本文件的应用。保存时保持 UTF-8 编码。能显示文字不代表语法有效;Python 可用 tomllib.load() 或 tomllib.loads() 解析,无效文档会引发 TOMLDecodeError。
  • IANA 登记说明 TOML 不包含可执行内容,但解析不可信输入仍有资源消耗风险。Python 官方警告,恶意 TOML 字符串可能消耗大量 CPU 和内存,建议限制待解析数据的大小。成功解析不代表配置来源或数值可信。
01

TOML 文件是什么、怎么打开与转换

TOML 全称为 Tom's Obvious, Minimal Language。基本结构是 key = value,支持字符串、整数、浮点数、布尔值、日期时间、数组、表和表数组,允许用 # 写注释。登记的媒体类型是 application/toml,扩展名为 .toml,没有固定魔数,不能依靠一组固定文件头字节识别。

先把原文件留着

Python 的 tomllib 可把 TOML 读取为字典,但不能写出 TOML。编辑已有文件且需要保留样式时,Python 文档推荐支持读写并保留样式的 TOML Kit。仅经过字典的转换不能保证保留注释和格式。浮点数转换还可能舍入,可通过 parse_float 指定 decimal.Decimal 等替代类型。

02

怎么打开

用文本编辑器打开 .toml 文件即可查看和编辑。Windows 可从编辑器的“打开”命令选取文件;Mac 应使用纯文本模式;手机需选择能打开 UTF-8 文本文件的应用。保存时保持 UTF-8 编码。能显示文字不代表语法有效;Python 可用 tomllib.load() 或 tomllib.loads() 解析,无效文档会引发 TOMLDecodeError。

只想看看内容

用文本编辑器打开 .toml 文件即可查看和编辑。Windows 可从编辑器的“打开”命令选取文件;Mac 应使用纯文本模式;手机需选择能打开 UTF-8 文本文件的应用。保存时保持 UTF-8 编码。能显示文字不代表语法有效;Python 可用 tomllib.load() 或 tomllib.loads() 解析,无效文档会引发 TOMLDecodeError。

要发给别人

Python 的 tomllib 可把 TOML 读取为字典,但不能写出 TOML。编辑已有文件且需要保留样式时,Python 文档推荐支持读写并保留样式的 TOML Kit。仅经过字典的转换不能保证保留注释和格式。浮点数转换还可能舍入,可通过 parse_float 指定 decimal.Decimal 等替代类型。

03

文件安全

IANA 登记说明 TOML 不包含可执行内容,但解析不可信输入仍有资源消耗风险。Python 官方警告,恶意 TOML 字符串可能消耗大量 CPU 和内存,建议限制待解析数据的大小。成功解析不代表配置来源或数值可信。

这几种情况先别打开

来路不明、文件名带两个后缀,或者内容和扩展名对不上——先停下来核对。

04

转换格式

Python 的 tomllib 可把 TOML 读取为字典,但不能写出 TOML。编辑已有文件且需要保留样式时,Python 文档推荐支持读写并保留样式的 TOML Kit。仅经过字典的转换不能保证保留注释和格式。浮点数转换还可能舍入,可通过 parse_float 指定 decimal.Decimal 等替代类型。

转换之前

先复制一份原文件再转换,转完对照看看画质、元数据和排版有没有变。

05

常见问题

TOML 是什么文件,用来做什么?

TOML 是文本配置文件,使用 key = value 表达键值,将内容无歧义地映射为哈希表。它区分大小写,必须采用有效 UTF-8 编码,可包含 # 注释。

Windows 怎么打开 TOML 文件?

启动文本编辑器,通过“打开”选取 .toml 文件。如果文件类型筛选隐藏了它,可切换为“所有文件”。编辑后保持 UTF-8 编码保存。

Mac 怎么编辑 TOML 配置文件?

用文本编辑器以纯文本模式打开,按 key = value 结构编辑,保存为 UTF-8 文本并保留 .toml 扩展名。保存后需用解析器检查语法,文字显示正常不等于配置有效。

手机怎么打开 TOML 文件?

在支持打开 UTF-8 文件的文本编辑应用中选取 .toml 文件。文件访问方式和编辑功能取决于应用;仅查看文字不能验证 TOML 语法。

TOML 文件读取报 TOMLDecodeError 怎么办?

这表示 Python 遇到了无效 TOML 文档。检查键值赋值、引号、表声明和 UTF-8 编码,并核对解析器版本。Python 3.11 起的 tomllib 支持 TOML 1.0.0,Python 3.15 增加 TOML 1.1.0 支持。

TOML 用文本编辑器还是 Python 解析器打开更合适?

查看或直接修改原文用文本编辑器;需要读取为字典并发现无效语法时用 Python 的 tomllib。tomllib 只读,不负责写回文件,也不能据此保证原文样式得到保留。

TOML 转换后如何保留注释和格式?

不能仅凭成功转换为字典就认为注释和格式会保留。Python 文档推荐使用具备读写能力、保留样式的 TOML Kit 编辑已有文件。转换后仍应核对注释和排版;tomllib 本身不能写出 TOML。

解析不可信 TOML 文件有什么风险?

IANA 说明 TOML 不包含可执行内容,但恶意输入可能让解析器消耗大量 CPU 和内存。解析前应限制数据大小;这里没有可适用于所有环境的安全大小数值。

TOML 浮点数精度会丢失吗?

可能。TOML 推荐至少支持 IEEE 754 binary64,超过 15 位有效十进制数字的数值可能被舍入。使用 Python tomllib 时,可设置 parse_float=decimal.Decimal 来选择十进制数值类型。

Python 怎么读取 TOML 文件?

对以二进制模式打开的文件使用 tomllib.load(),对字符串使用 tomllib.loads(),结果是字典。tomllib 从 Python 3.11 起属于标准库,只负责读取,不支持写出 TOML。

TOML 能成功解析就代表配置内容可信吗?

不能。成功解析只说明解析器接受了文档,不会核实文件来源、值是否准确,或这些配置是否适合实际用途。

TOML 表和数组怎么写?

数组用方括号,例如 ports = [8000, 8001]。表用单层方括号声明,例如 [server],后面可写 host = "localhost" 等键值;表数组用双层方括号声明,例如 [[servers]]。键名区分大小写。

06

相关格式

资料来源

TOML v1.1.0 官方规范 · TOML 官方项目

application/toml 媒体类型登记 · IANA

tomllib — Parse TOML files · Python 官方文档

Tom's Obvious, Minimal Language · 美国国会图书馆