1 配置文件的必要性
在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁。
(1)这个固定文件我们可以直接写成一个.py文件,例如settings.py或config.py,这样的好处就是能够在同一工程下直接通过import来导入其中的部分。
(2)但如果我们需要在其他非Python的平台进行配置文件共享时,写成单个.py就不是一个很好的选择。这时我们就应该选择通用的配置文件类型来作为存储这些固定的部分。
目前常用且流行的配置文件格式类型主要有ini、json、toml、yaml、xml 等,这些类型的配置文件我们都可以通过标准库或第三方库来进行解析。
2 配置文件格式
2.1 ini
ini即Initialize初始化之意,早期是在Windows上配置文件的存储格式。ini文件的写法通俗易懂,往往比较简单,通常由节(Section)、键(key)和值(value)组成,就像以下形式:
[localdb]
host = 127.0.0.1
user = root
password = 123456
port = 3306
database = mysql
Python本身内置的configparser标准库,我们直接就可以用来对ini文件进行解析。如我们将上述内容保存在一个名为db.ini的文件中,然后使用read()方法来进行解析和读取,最后通过items()方法来获取指定节点下的所有键值对。
from configparser import ConfigParser
cfg = ConfigParser()
cfg.read("db.ini")
re_list = cfg.items("localdb")
re_dict = dict(re_list) # 转化为字典
print(re_dict)
con = pymysql.connect(**re_dict)
需要注意的是,configparser默认将值以字符串的形式呈现,所以这也就是为什么我们在db.ini文件中没有加引号而是直接将字面量写在上面的原因。
获取到键值对后,直接就将其转换成字典,然后通过解包的方式进行传参,保持代码简洁。
2.2 json
json格式可以说是我们常见的一种文件形式了,也是目前在互联网较为流行的一种数据交换格式。除此之外,json有时也是配置文件的一种。
比如npm(JavaScript包管理工具类似Python的pip)、以及微软出品的目前被广泛使用的VSCode编辑器,都使用json编写配置参数。
和configparser一样,Python也内置了json标准库,可以通过load()和loads()方法来导入文件式和字符串的json内容。
{
"localdb":{
"host": "127.0.0.1",
"user": "root",
"password": "123456",
"port": 3306,
"database": "mysql"
}
}
将上述内容保存为db.json后进行读取和解析,json库读取json文件相对简单容易,而且很容易解析成Python的字典对象。
import json
with open("db.json","r",encoding="utf-8") as fr:
data_json = fr.read()
re_dict = json.loads(data_json)
print(re_dict)
使用json文件配置的缺点就是语法标准严格限制,为人所诟病之一的就是无法在当中写注释,除非采取json类型的其他超集作为替代方案(VSCode 中能写注释的json参数配置文件便是代替方案的一种);同时存在嵌套过深的问题,容易导致出错,不宜用来写过长或复杂的参数配置信息。