用 Python 读写 TOML 文件

本文介绍了TOML文件格式,强调其简洁性和易读性,以及在配置文件中的应用。通过Python的`toml`模块,展示了如何读取、写入和修改TOML文件,并对比了TOML与JSON的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TOML 文件表示(Tom’s Obvious,最小语言)。配置文件可以存储在TOML 文件中,其扩展名为 .toml。由于其语义简单,力求“最小化”,因此它应该易于阅读和编写。它还可以清楚地映射到字典。TOML 的语法主要由键=值对组成。这使得 TOML 旨在易于人们阅读和创建,同时又易于计算机解析。此外,TOML 还可用作其他配置文件格式(例如JSON 和 YAML)的替代方案。

所需模块:

通过在终端或命令提示符中执行以下命令,我们可以使用 PIP 来安装软件包。

pip install toml

TOML 文件格式

键/值对、节/表和注释构成了 TOML 文件的大部分,这些文件也需要是有效的 UTF-8 编码的 Unicode 文档。TOML 支持以下数据类型:字符串、整数、浮点型、布尔型、日期时间、数组和表(哈希表/字典)。TOML 是区分大小写的语言。以下是 TOML 文件语法的简要概述:

  • 注释以 # 字符开始,一直到行尾。
  • 键值对表示为key = value并用换行符分隔。
  • 可以使用方括号嵌套键以创建节的层次结构,例如 [section1.subsection1]
  • 值可以是字符串(在引号中)、整数、浮点数、布尔值、日期/时间(采用 ISO 8601 格式)、数组(在方括号中)或表格(在花括号中)。
  • 数组可以包含任何类型的值,包括其他数组或表。
  • 表表示一组键值对,可用于将相关的配置设置分组在一起。表可以有自己的部分,并且可以嵌套在其他表中。
  • 空白(空格、制表符和换行符)在 TOML 文件中很重要,应一致使用以确保正确解析文件。

TOML 模块的用例

  • 配置文件:TOML 通常用作 Python 应用程序的配置文件格式。toml模块可用于解析这些配置文件并将配置数据加载到应用程序中。
  • 数据序列化:TOML可用于序列化和反序列化Python数据结构。toml模块提供了将 Python 字典与 TOML 数据相互转换的方法。
  • 互操作性:TOML是一种跨语言格式,这意味着TOML数据可以在不同的编程语言之间轻松共享。toml模块可用于将 Python 数据结构转换为 TOML,然后可以轻松地与其他语言共享。
  • 测试: TOML可以用作测试夹具格式,允许开发人员以TOML格式编写测试用例,并使用toml模块在Python中加载和运行测试用例。

目录结构:

image.png

创建 TOML 文件

创建一个 TOML 文件,复制粘贴以下文本,然后使用扩展名 .toml 保存

[server]
host = "localhost"
port = 8080
ssl = false

[database]
url = "mongodb://localhost:27017"
name = "mydb"
username = "myuser"
password = "mypassword"
level = "info"

使用Python读取TOML文件

toml.load() 方法读取 TOML 文件的内容并将解析后的数据作为 Python 字典返回。汤姆 . dumps() 方法将数据序列化回 TOML 格式并将其作为字符串返回。最后,使用print() 方法将序列化的 TOML 数据打印到控制台。此代码可用于读取和修改存储在 TOML 文件中的配置数据,然后使用 toml.dump () 方法将修改后的数据保存回文件中。

app.py

import toml

with open('config.toml', 'r') as f:
	config = toml.load(f)

# 从配置访问值
print(config['server']['host'])
print(config['server']['port'])
print(config['database']['username'])

输出:

image.png

使用 Python 写入 TOML 文件

然后使用toml.load() 方法将文件的内容解析到名为 config的字典中。然后,代码通过在 ‘database’ 键下添加新的键值对来修改 config 字典中的特定值。新的键为 ‘level2’ ,值为’新添加的信息’ 。最后,使用toml.dump()方法将修改后的 config字典写回到config.toml文件中,该方法将字典转换为TOML格式并写入到文件中。文件以写模式打开,with语句确保写入后正确关闭。

输出:

再次检查 config.toml 文件

[server]
host = "localhost"
port = 8080
ssl = false

[database]
url = "mongodb://localhost:27017"
name = "mydb"
username = "myuser"
password = "mypassword"
level = "info"
level2 = "new added information"

使用Python修改TOML文件

代码首先导入 toml 库,该库提供了加载和转储 TOML 文件的功能,使用 open () 函数打开名为 config.toml 的 TOML 配置文件。该文件以读取模式(‘r’)打开,并使用 toml.load() 函数将其内容加载到 Python 字典中。生成的字典称为 config,包含 TOML 文件中的配置数据。然后,代码通过将数据库部分中的级别值更改为“信息”来修改配置字典中的值。
最后将修改后的config字典写回到 config.toml 中再次使用 open() 函数打开文件,这次处于写入模式(‘w’)。使用 toml.dump() 函数将修改后的字典写入文件,该函数将字典转换为 TOML 格式的字符串并将其写入文件。

app.py

import toml

# 加载TOML文件
with open('config.toml', 'r') as f:
	config = toml.load(f)

# 修改配置中的值
config['database']['level'] = 'information'

# 将修改后的配置写回文件
with open('config.toml', 'w') as f:
	toml.dump(config, f)

输出:

再次检查 config.toml 文件以查看更改:

[server]
host = "localhost"
port = 8080
ssl = false

[database]
url = "mongodb://localhost:27017"
name = "mydb"
username = "myuser"
password = "mypassword"
level = "information" 

JSON 和 TOML 文件之间的区别

Toml 和 JSON 都可以有效地表示结构化数据,但是它们在数据类型、灵活性和语法方面有所不同。选择的格式取决于您项目的具体需求以及您正在使用的工具和库。

  • 语法:JSON 使用基于 JavaScript 对象表示法的语法,而 TOML 使用更易于理解的语法,更接近配置文件。
  • 注释:TOML 支持注释,而 JSON 不支持。
  • 数据 类型:JSON 支持一组有限的数据类型,包括字符串、数字、布尔值、数组和对象。另一方面,TOML 支持更广泛的数据类型,包括日期、时间和表格。
  • 使用 案例:JSON 广泛用于 Web 应用程序、API 和数据库之间的数据交换。TOML 通常用于配置文件,例如流行的静态站点生成器 Hugo。

例子:

JSONTOML
{ “employee”: { “name”: “John Doe”, “age”: 35, “gender”: “male”, “address”: “123 Main St, Anytown USA”, “hobbies”: [“reading”, “cooking”, “hiking”], “skills”: { “programming_languages”: [“Python”, “Java”, “C++”], “databases”: [“MySQL”, “PostgreSQL”, “MongoDB”] } } }[employee] name = “John Doe” age = 35 gender = “male” address = “123 Main St, Anytown USA” hobbies = [“reading”, “cooking”, “hiking”][employee.skills] programming_languages = [“Python”, “Java”, “C++”] databases = [“MySQL”, “PostgreSQL”, “MongoDB”]

image.png

本文转自 https://juejin.cn/post/7272176270807875639,如有侵权,请联系删除。


<center><B>---------------------------END---------------------------



## 题外话
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.


![在这里插入图片描述](https://img-blog.csdnimg.cn/cb9eaa37ce994535bdf60e07ba4cf09e.jpeg#pic_center)

<font face="幼圆" size="4" color="red">感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
</font>
<img src="https://img-blog.csdnimg.cn/img_convert/ad7c7647f646873bf3b816aed8298a32.gif">
👉<font color = red>CSDN大礼包:gift::</font>[全网最全《Python学习资料》免费赠送:free:!](https://blog.csdn.net/weixin_68789096/article/details/132275547?spm=1001.2014.3001.5502)<font color=#66cc66>(安全链接,放心点击)</font>



**一、Python所有方向的学习路线**

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

![img](https://img-blog.csdnimg.cn/1d40facda2b84990b8e1743f5487d455.png)
 ![img](https://img-blog.csdnimg.cn/0fc11d4a31bd431dbf124f67f1749046.png)



**二、Python必备开发工具**

工具都帮大家整理好了,安装就可直接上手!![img](https://img-blog.csdnimg.cn/ff266f529c6a46c4bc28e5f895dec647.gif#pic_center)

**三、最新Python学习笔记**

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

 ![img](https://img-blog.csdnimg.cn/6d414e9f494742db8bcc3fa312200539.png)



**四、Python视频合集**

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

![img](https://img-blog.csdnimg.cn/a806d9b941c645858c61d161aec43789.png)

**五、实战案例**

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

![img](https://img-blog.csdnimg.cn/a353983317b14d3c8856824a0d6186c1.png)

 **六、面试宝典**

![在这里插入图片描述](https://img-blog.csdnimg.cn/97c454a3e5b4439b8600b50011cc8fe4.png)

![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png)

##### **简历模板**![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
<img src="https://img-blog.csdnimg.cn/img_convert/ad7c7647f646873bf3b816aed8298a32.gif">
👉<font color = red>CSDN大礼包:gift::</font>[全网最全《Python学习资料》免费赠送:free:!](https://blog.csdn.net/weixin_68789096/article/details/132275547?spm=1001.2014.3001.5502)<font color=#66cc66>(安全链接,放心点击)</font>

若有侵权,请联系删除
<think>我们正在讨论如何在Python中处理TOML文件。根据引用,Python3.11及以上版本内置了`tomllib`模块用于解析TOML文件(读取),但写入TOML文件需要第三方库,如`tomli-w`或`tomlkit`。用户需求:如何在Python中使用TOML格式进行读写操作或者相关库介绍。步骤:1.读取TOML文件:使用标准库`tomllib`(Python>=3.11)或第三方库`tomli`(兼容旧版本)来读取。2.写入TOML文件:使用第三方库如`tomli-w`(轻量级写入)或`tomlkit`(保留格式的读写)。我们将介绍:-使用`tomllib`读取TOML文件-使用`tomli-w`写入TOML文件(因为引用[2]提到tomllib没有写入功能,而tomli-w是一个推荐的写入库)-另外,也可以使用`tomlkit`进行读写(它可以保留注释和格式)注意:如果用户使用的是Python3.11以下版本,读取也需要使用第三方库(如`tomli`),但引用中用户使用的是3.11,所以我们以3.11为例。根据引用[2]和引用[3],我们给出示例代码。同时,引用[4]提到TOML的目标是成为极简的配置文件格式,所以我们的操作会围绕配置文件处理展开。我们将分两部分:读取和写入。第一部分:读取TOML文件(使用tomllib)第二部分:写入TOML文件(使用tomli-w和tomlkit)注意:引用[2]提供了官方文档链接,我们会在相关地方提示用户参考。另外,我们也会简要介绍如何处理异常(TOMLDecodeError)。最后,生成相关问题。开始回答:</think>### PythonTOML文件读写操作指南 TOML(Tom's Obvious Minimal Language)是一种简洁的配置文件格式,Python 3.11+ 原生支持TOML解析。以下是完整的操作指南: --- #### 1. **读取TOML文件**(使用标准库`tomllib`) ```python import tomllib # 从文件读取 with open('config.toml', 'rb') as f: config = tomllib.load(f) # 从字符串读取 toml_str = """ [database] host = "localhost" port = 5432 """ config = tomllib.loads(toml_str) # 访问数据 print(config['database']['host']) # 输出: localhost ``` > 关键点: > - 必须用二进制模式(`'rb'`)打开文件[^2] > - 返回嵌套字典结构 > - 自动转换数据类型(日期→datetime,数组→list等) --- #### 2. **写入TOML文件**(需第三方库) 由于标准库不支持写入,推荐以下方案: ##### 方案1:使用`tomli-w`(轻量级) ```python import tomli_w data = { "server": { "ip": "192.168.1.1", "ports": [80, 443], "enabled": True } } with open('output.toml', 'wb') as f: tomli_w.dump(data, f) ``` 生成文件内容: ```toml [server] ip = "192.168.1.1" ports = [80, 443] enabled = true ``` ##### 方案2:使用`tomlkit`(保留格式) ```python from tomlkit import dump, table doc = table() doc.add("title", "TOML示例") doc.add("owner", {"name": "Tom", "dob": "1979-05-27"}) with open('config.toml', 'w') as f: dump(doc, f) ``` > 优势:保留注释和原始格式[^2] --- #### 3. **异常处理** ```python from tomllib import TOMLDecodeError try: with open('config.toml', 'rb') as f: config = tomllib.load(f) except TOMLDecodeError as e: print(f"TOML解析错误: {e}") except FileNotFoundError: print("文件不存在") ``` --- #### 4. **跨版本兼容方案** Python < 3.11 需安装第三方库: ```bash pip install tomli tomli-w ``` 使用方式: ```python # 读取 import tomli as tomllib with open('config.toml', 'rb') as f: config = tomllib.load(f) # 写入 import tomli_w tomli_w.dump(data, open('out.toml', 'wb')) ``` --- ### 推荐学习资源 1. [TOML官方语法规范](https://toml.io)(必备参考)[^2] 2. [Python tomllib官方文档](https://docs.python.org/zh-cn/3.12/library/tomllib.html)[^2] 3. [tomlkit高级操作指南](https://pypi.org/project/tomlkit/)(格式保留场景)[^2] > **最佳实践**: > - 配置文件读取 → 优先使用标准库`tomllib` > - 动态生成配置 → 选择`tomli-w`或`tomlkit` > - 旧项目兼容 → `tomli`+`tomli-w`组合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值