Python中常見的配置文件寫法
在開發過程中,我們常常會用到一些固定參數或者是常量。對於這些較為固定且常用到的部分,往往會將其寫到一個固定文件中,避免在不同的模塊代碼中重復出現從而保持核心代碼整潔。
(1)這個固定文件我們可以直接寫成一個.py文件,例如settings.py或config.py,這樣的好處就是能夠在同一工程下直接通過import來導入其中的部分。
(2)但如果我們需要在其他非Python的平台進行配置文件共享時,寫成單個.py就不是一個很好的選擇。這時我們就應該選擇通用的配置文件類型來作為存儲這些固定的部分。
目前常用且流行的配置文件格式類型主要有ini、json、toml、yaml、xml 等,這些類型的配置文件我們都可以通過標准庫或第三方庫來進行解析。
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文件中沒有加引號而是直接將字面量寫在上面的原因。
獲取到鍵值對後,直接就將其轉換成字典,然後通過解包的方式進行傳參,保持代碼簡潔。
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參數配置文件便是代替方案的一種);同時存在嵌套過深的問題,容易導致出錯,不宜用來寫過長或復雜的參數配置信息。