常见配置文件格式

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

Python的第三方toml模块可以很方便地对TOML文件进行解析与生成 TOML也有内容完整清晰的官方文档方便入门

往年同期文章