1 INI ⭐⭐⭐
INI:Initialization file的格式,最初为Windows系统中的基础配置文件格式
INI格式作为早期常见的配置文件格式,通常由节(Section)、键(key)和值(value)组成
缺点:不适合复杂的格式或多嵌套的情况
[localdb]
host = 127.0.0.1
user = root
password = 123456
port = 3306
database = mysql
Python内置configparser模块提供了对INI配置格式的支持
2 XML ⭐⭐⭐
XML:Extensible Markup Language,可扩展标记语言
HTML的设计初衷是显示数据,而XML的设计初衷是存储和传输数据
缺点:标签多,解析慢,内容冗长,容错性低,无法自动校验
<?xml version="1.0"?>
<localdb>
<host>127.0.0.1</host>
<user>root</user>
<password>123456</password>
<port>3306</port>
<database>mysql</database>
</localdb>
Python内置xml模块用于处理XML文件,更多细节可参阅Python读取xml文件
3 JSON ⭐⭐⭐⭐
JSON:JavaScript Object Notation,一种轻量级数据交换格式
JSON格式内容简洁,解析快速,普及广泛,允许多层嵌套,支持数据类型丰富。常用于后台响应数据封装,也可以用作配置文件或数据存储
缺点:语法严格;无法写注释;嵌套过深时可读性差
{
"localdb":
{
"host": "127.0.0.1",
"user": "root",
"password": "123456",
"port": 3306,
"database": "mysql"
}
}
Python内置json模块包含了对JSON的解码与编码
JSON 支持浮点数、整数、布尔、null、字符串和列表
与 Python 不同,JSON 字符串不支持单引号
验证 JSON 的常用在线工具是 JSON Lint 和 JSON Formatter
4 YAML ⭐⭐⭐⭐⭐
YAML:原始含义为"Yet Another Markup Language",后来为了强调这种语言是以数据为中心,而不是以标记语言为重心,缩写反向重名为"YAML Ain't a Markup Language"
YAML作为一种数据序列化语言,博采众长(C、Python、XML等等),语法简洁并且功能强大,近几年非常流行,常用于编写配置文件,文件后缀为.yml
YAML主要包含三种数据结构(键值对、数组、标量),对多嵌套有很好的支持
缺点:空格和缩进规范严格;完整的规范内容冗长
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: "123456"
database: "test"
JSON格式可以理解为YAML格式的一种子集
Python的第三方PyYAML模块对YAML格式有很好的支持 YAML使用入门可参考阮一峰-YAML 语言教程
补充:常见的几种yaml文件处理方法可能在存储时会丢失原始的注释信息和元素顺序信息,因此本人为了规避以上两个问题,后来比较常用的是另一个Python第三方模块——ruamel.yaml
5 TOML ⭐⭐⭐⭐⭐
TOML:“Tom's Obvious, Minimal Language”的递归缩写,“Tom”指作者Tom Preston-Werner
TOML追求最少量的配置编写,最易于阅读的语义表达,数据类型丰富,并融合了INI与YAML的优势(基本语法更接近INI,功能支持靠拢YAML)
缺点:修改层次结构麻烦;作为后起之秀,普及性不如前几位
[mysql]
host = "127.0.0.1"
ports = 3306
connection_max = 5000
enabled = true