使用 Python 读写 TOML 文件

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

所需模块:

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

python 复制代码
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中加载和运行测试用例。

目录结构:

创建 TOML 文件

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

python 复制代码
[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

python 复制代码
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'])

输出:

使用 Python 写入 TOML 文件

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

输出:

再次检查 config.toml 文件

python 复制代码
[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

python 复制代码
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 文件以查看更改:

python 复制代码
[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。

例子:

JSON TOML
{ "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"]
相关推荐
2401_882727571 小时前
低代码配置式组态软件-BY组态
前端·后端·物联网·低代码·前端框架
沐霜枫叶1 小时前
解决pycharm无法识别miniconda
ide·python·pycharm
途途途途2 小时前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
蓝染然2 小时前
jax踩坑指南——人类早期驯服jax实录
python
许野平2 小时前
Rust: enum 和 i32 的区别和互换
python·算法·rust·enum·i32
问道飞鱼2 小时前
【Python知识】Python进阶-什么是装饰器?
开发语言·python·装饰器
追逐时光者2 小时前
.NET 在 Visual Studio 中的高效编程技巧集
后端·.net·visual studio
大梦百万秋3 小时前
Spring Boot实战:构建一个简单的RESTful API
spring boot·后端·restful
AI视觉网奇3 小时前
Detected at node ‘truediv‘ defined at (most recent call last): Node: ‘truediv‘
人工智能·python·tensorflow
GuYue.bing3 小时前
网络下载ts流媒体
开发语言·python