Python3中常見配置文件寫法匯總
1、引言
小魚:小屌絲,走啊,出去擼串啊,
小屌絲:沒時間啊,魚哥
小魚:嗯??? 啥事情讓你忙的擼串都不去了
小屌絲:我的BOSS讓我寫一個自動化平臺,但是我不知道這些參數(shù)放在**.py文件里面,還是放在配置文件**里面。
小魚:就因為這個?
小屌絲:對啊,
小魚:唉…我還以為啥事呢, 放在配置文件里。
小屌絲:但是,我對配置文件寫法不太熟(尷尬的一批)…
小魚:… 每次都上當(dāng), 當(dāng)當(dāng)不一樣。
小屌絲:嘿嘿… 這不是要向你學(xué)習(xí)嘛。
小魚:… 為了擼串,認(rèn)了。
2、配置文件寫法
關(guān)于配置文件的寫法, 常用的 大致有:
- ini
- json
- toml
- yaml
接下來,我們就詳細(xì)聊一聊 這四種常用配置文件的寫法。
2.1 ini
ini 即 Initialize ,最早是在 Windows 上配置文件的存儲格式。
ini 文件的寫法通俗易懂,往往比較簡單,通常由節(jié)(Section)、鍵(key)和值(value)組成,就像以下形式
localdb.ini
[localdb] Host = 127.0.0.1 user = root password = 888888 port = 3306 database = mysql
Python 本身內(nèi)置的 configparser 標(biāo)準(zhǔn)庫,我們直接就可以用來對 ini 文件進(jìn)行解析。
如我們將上述內(nèi)容保存在一個名為 test1.ini 的文件中,然后使用 read() 方法來進(jìn)行解析和讀取,最后通過 items() 方法來獲取指定節(jié)點(diǎn)下的所有鍵值對。
代碼示例:
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ from configparser import ConfigParser cfg = ConfigParser() db_path= cfg.read("D:\Project\Project\localdb.ini") #配置文件路徑 print(f"配置文件路徑:{db_path}") db_msg = cfg.items("localdb") #配置文件內(nèi)容 print(f"配置文件內(nèi)容:{db_msg}")
運(yùn)行結(jié)果
配置文件路徑:['D:\\Project\\Project\\localdb.ini']
配置文件內(nèi)容:{'host': '127.0.0.1', 'user': 'root', 'password': '888888', 'port': '3306', 'database': 'mysql'}
注意點(diǎn)
configparser 默認(rèn)將值以字符串的形式呈現(xiàn)。
上面代碼,獲取到鍵值對后,我們再來轉(zhuǎn)換成字典,然后再進(jìn)行傳參。
代碼示例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ from configparser import ConfigParser import pymysql cfg = ConfigParser() db_path= cfg.read("D:\Project\Project\localdb.ini") #配置文件路徑 #print(f"配置文件路徑:{db_path}") #對內(nèi)容轉(zhuǎn)換成字典 db_msg = dict(cfg.items("localdb")) #鏈接數(shù)據(jù)庫 con = pymysql.connect(**db_msg)
2.2 json
看到j(luò)son,不要驚訝, 因為json也可以以配置文件存在的。
例如:
- npm(JavaScript 包管理工具類似 Python 的 pip)、
- 微軟出品的目前被廣泛使用的 VSCode 編輯器
都使用 json 編寫配置參數(shù)。
當(dāng)然 json也是python標(biāo)準(zhǔn)庫。
我們通過load() 和loads()方法來導(dǎo)入文件式和字符串的 json 內(nèi)容。
localdb.json
{ "localdb":{ "host": "127.0.0.1", "user": "root", "password": "888888", "port": 3306, "database": "mysql" } }
代碼示例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import json from pprint import pprint with open("D:\Project\Project\localdb.json") as js: cfg = json.load(js)['localdb'] #以json格式輸出 pprint(cfg)
運(yùn)行結(jié)果:
{'database': 'mysql',
'host': '127.0.0.1',
'password': '888888',
'port': 3306,
'user': 'root'}
2.3 toml
toml 格式(或 tml 格式)是 Github 聯(lián)合創(chuàng)始人 Tom Preston-Werner 所提出的一種配置文件格式。
toml 格式:
從樣例中可以看出,toml 有點(diǎn)類似于前面所講的 ini 文件。但是它比 ini 擴(kuò)展了更多的內(nèi)容。
當(dāng)然,如果要使用toml,就需要先安裝。
老規(guī)矩:
pip install toml
其它安裝方式,直接看這兩篇:
localdb.toml
[mysql] host = "127.0.0.1" user = "root" port = 3306 database = "test" [mysql.parameters] pool_size = 5 charset = "utf8" [mysql.fields] pandas_cols = [ "id", "name", "age", "date"]
代碼示例
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import toml,os from pprint import pprint cfg = toml.load(os.path.expanduser("D:\Project\Project\localdb.toml")) pprint(cfg)
運(yùn)行結(jié)果
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameters': {'charset': 'utf8', 'pool_size': 5},
'port': 3306,
'user': 'root'}}
可以看到 toml 文件被間接地轉(zhuǎn)化成了字典類型。
2.4 yaml
yaml 格式(或 yml 格式)是目前較為流行的一種配置文件,它早在 2001 由一個名為 Clark Evans 的人提出;
同時它也是目前被廣泛使用的配置文件類型,典型的就是 Docker 容器里的 docker-compose.yml 配置文件。
YAML 官方早已經(jīng)提供了相應(yīng)的 Python 庫進(jìn)行支持,即 PyYAML,
所以,第一步,需要安裝
pip install pyyaml
用法:
與 json 庫和 toml 庫一樣,通過 load() 方法來進(jìn)行加載。
但是,考慮到安全性, 所以,最好是使用 safe_load() 來代替 load() 方法
localdb.yaml
mysql: host: "127.0.0.1" port: 3306 user: "root" password: "888888" database: "test" parameter: pool_size: 5 charset: "utf8" fields: pandas_cols: - id - name - age - date
代碼示例:
# -*- coding:utf-8 -*- # @Time : 2022-08-04 # @Author : Carl_DJ import os from pprint import pprint with open("D:\Project\Project\localdb.json") as ya: cfg = yaml.safe_load(ya) pprint(cfg)
運(yùn)行結(jié)果:
{'mysql': {'database': 'test',
'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},
'host': '127.0.0.1',
'parameter': {'charset': 'utf8', 'pool_size': 5},
'password': '888888',
'port': 3306,
'user': 'root'}}
可以看到最后結(jié)果和前面的 toml 庫的解析結(jié)果基本一致。
3、總結(jié)
看到這里,今天的分享差不多就完事了。
今天共分享了四種讀取配置文件的方式:
ini
- json
- toml
- yaml
其實在實際工作中, 只需要掌握一種或者兩種方式,即可。
當(dāng)然,如果要擴(kuò)展自己的知識庫,那就需要多掌握幾種,
畢竟誰會嫌棄自己的知識儲備量少呢?
以上就是Python3中常見配置文件寫法匯總的詳細(xì)內(nèi)容,更多關(guān)于Python配置文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實現(xiàn)幾種歸一化方法(Normalization Method)
這篇文章主要介紹了python實現(xiàn)幾種歸一化方法(Normalization Method),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07pytest進(jìn)階教程之fixture函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于pytest進(jìn)階教程之fixture函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03不到40行代碼用Python實現(xiàn)一個簡單的推薦系統(tǒng)
這篇文章主要給大家介紹了如何利用不到40行python代碼實現(xiàn)一個簡單的推薦系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python統(tǒng)計某列不同值的個數(shù)的示例代碼
在數(shù)據(jù)分析和數(shù)據(jù)處理中,統(tǒng)計數(shù)據(jù)往往集中在特定列中不同值的出現(xiàn)次數(shù),本文主要介紹了Python統(tǒng)計某列不同值的個數(shù)的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-03-03Python 使用tf-idf算法計算文檔關(guān)鍵字權(quán)重并生成詞云的方法
這篇文章主要介紹了Python 使用tf-idf算法計算文檔關(guān)鍵字權(quán)重,并生成詞云,本文通過實例代碼給大家介紹的非常想詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03完美解決Pycharm無法導(dǎo)入包的問題 Unresolved reference
今天小編就為大家分享一篇完美解決Pycharm無法導(dǎo)入包的問題 Unresolved reference,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python關(guān)于print的操作(倒計時、轉(zhuǎn)圈顯示、進(jìn)度條)
這篇文章主要介紹了Python關(guān)于print的操作(倒計時、轉(zhuǎn)圈顯示、進(jìn)度條),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05