Python配置文件管理之ini和yaml文件讀取的實(shí)現(xiàn)
1. 引言
當(dāng)我們?cè)O(shè)計(jì)軟件時(shí),我們通常會(huì)花費(fèi)大量精力來編寫高質(zhì)量的代碼。但這往往還不夠,一個(gè)好的軟件還應(yīng)該考慮其整個(gè)系統(tǒng),如測(cè)試、部署、網(wǎng)絡(luò)等。其中最重要的一個(gè)方面是配置管理。
良好的配置管理應(yīng)允許在任何環(huán)境中執(zhí)行軟件而不更改代碼。最常見的配置包括數(shù)據(jù)庫(kù)認(rèn)證配置、部署服務(wù)器的主機(jī)名、動(dòng)態(tài)參數(shù)等。在本文中,我想與大家分享一些配置管理的良好實(shí)踐,以及如何在Python中實(shí)現(xiàn)它們。
閑話少說,我們直接開始吧!
2. 如何選擇配置文件的格式
事實(shí)上,只要代碼能夠讀取和解析配置文件的內(nèi)容,那么配置文件的格式就沒有任何限制。但是,業(yè)內(nèi)有一些好的做法。最常見和標(biāo)準(zhǔn)化的格式是YAML、JSON、TOML和INI。
一個(gè)好的配置文件一般需要滿足以下三個(gè)標(biāo)準(zhǔn):
- 易于閱讀和編輯:它應(yīng)該以文本為基礎(chǔ),以易于理解的方式進(jìn)行構(gòu)建。即使是非開發(fā)人員也應(yīng)該能夠閱讀。
- 允許注釋:配置文件不是只有開發(fā)人員才能讀取的文件。當(dāng)非開發(fā)人員試圖理解代碼行為時(shí),注釋就顯得很重要。編寫注釋是快速解釋某些事情的一種方式,從而使配置文件更具表現(xiàn)力。
- 易于部署:所有操作系統(tǒng)和環(huán)境都應(yīng)接受該配置文件。
如果你仍然不知道哪一個(gè)更好,但是在Python中,我推薦的答案將是YAML或INI。這是由于YAML和INI被大多數(shù)Python程序和包所接受。
3. INI文件示例
INI文件通常是最簡(jiǎn)單的解決方案,由于它只有一個(gè)層次結(jié)構(gòu)。然而,INI文件中沒有數(shù)據(jù)類型,所有內(nèi)容都被編碼為字符串。
示例如下:
[APP] ENVIRONMENT = test DEBUG = True # Only accept True or False [DATABASE] USERNAME = xiaoxu PASSWORD = xiaoxu HOST = 127.0.0.1 PORT = 5432 DB = xiaoxu_database
4. YAML文件示例
使用YAML針對(duì)上述示例的相同配置如下所示。如下所示,YAML文件支持嵌套結(jié)構(gòu)。此外,YAML也支持一些常見的數(shù)據(jù)類型,如字符串、整數(shù)、雙精度、布爾值、列表、字典等。
APP: ? ENVIRONMENT: test ? DEBUG: True ? # Only accept True or False DATABASE: ? USERNAME: xiaoxu ? PASSWORD: xiaoxu ? HOST: 127.0.0.1 ? PORT: 5432 ? DB: xiaoxu_database
5. 使用Cofigureparser讀取ini文件
首先,我們來介紹Python專門為配置管理而設(shè)計(jì)的包,我們從內(nèi)置的配置包Configureparser開始。
Configureparser主要用于讀取和寫入INI文件,但它也同樣支持字典和可迭代文件對(duì)象作為輸入。每個(gè)INI文件由多個(gè)部分組成,其中有多個(gè)鍵、值對(duì)。
下面是上述ini文件讀取的示例:
import configparser def read_ini(file_path, config_json): ? ? config = configparser.ConfigParser() ? ? config.read(file_path) ? ? for section in config.sections(): ? ? ? ? for key in config[section]: ? ? ? ? ? ? print((key, config[section][key])) ? read_ini("source/data/sample.ini", config_json) # ('environment', 'test') # ('debug', 'True') # ('username', 'xiaoxu') # ('password', 'xiaoxu') # ('host', '127.0.0.1') # ('port', '5432') # ('db', 'xiaoxu_database')
Configureparser并不會(huì)猜測(cè)配置文件中的數(shù)據(jù)類型,因此每個(gè)配置項(xiàng)都被存儲(chǔ)為字符串。但它提供了一些將字符串轉(zhuǎn)換為正確數(shù)據(jù)類型的方法。這里面最有趣的是布爾類型,因?yàn)樗軌蜃R(shí)別諸如yes/no、on/off、true/false和1/0的布爾值。
6. yaml文件讀取示例
Python有專門的內(nèi)置包來解析yaml文件。由于安全性問題,建議使用yaml.safe_load()而不是yaml.load()來進(jìn)行yaml文件的讀取。
示例代碼如下:
import yaml def read_yaml(file_path): ? ? with open(file_path, "r") as f: ? ? ? ? return yaml.safe_load(f) data = read_yaml("data/sample.yaml") print(data)
7. 總結(jié)
本文重點(diǎn)介紹了Python中配置文件的讀取,主要包括常見的ini和yaml兩種文件格式,并給出了相應(yīng)的代碼示例。
到此這篇關(guān)于Python配置文件管理之ini和yaml文件讀取的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python ini和yaml文件讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3訪問并下載網(wǎng)頁(yè)內(nèi)容的方法
這篇文章主要介紹了Python3訪問并下載網(wǎng)頁(yè)內(nèi)容的方法,實(shí)例分析了Python頁(yè)面抓取及寫入文件的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07解決Django部署設(shè)置Debug=False時(shí)xadmin后臺(tái)管理系統(tǒng)樣式丟失
這篇文章主要介紹了解決Django部署設(shè)置Debug=False時(shí)xadmin后臺(tái)管理系統(tǒng)樣式丟失的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python處理命令行參數(shù)模塊optpars用法實(shí)例分析
這篇文章主要介紹了Python處理命令行參數(shù)模塊optpars用法,結(jié)合實(shí)例形式分析了optpars模塊的功能,Python使用optpars模塊設(shè)置命令行參數(shù)相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python利用Matplotlib庫(kù)實(shí)現(xiàn)繪制餅形圖
這篇文章主要為大家分享了基于python+matplotlib庫(kù)的餅形圖繪制,具體內(nèi)容涉及一般的餅圖、分裂餅圖、以及環(huán)形圖,感興趣的小伙伴可以了解一下2022-04-04Python提示[Errno 32]Broken pipe導(dǎo)致線程crash錯(cuò)誤解決方法
這篇文章主要介紹了Python提示[Errno 32]Broken pipe導(dǎo)致線程crash錯(cuò)誤解決方法,是ThreadingHTTPServer實(shí)現(xiàn)http服務(wù)中經(jīng)常會(huì)遇到的問題,需要的朋友可以參考下2014-11-11python3.7安裝matplotlib失敗問題的完美解決方法
由于學(xué)習(xí)需要安裝matplotlib庫(kù),閱讀網(wǎng)上教程后一直出現(xiàn)各種各樣的錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于python3.7安裝matplotlib失敗問題的完美解決方法,需要的朋友可以參考下2022-07-07在django項(xiàng)目中,如何單獨(dú)運(yùn)行某個(gè)python文件
這篇文章主要介紹了在django項(xiàng)目中單獨(dú)運(yùn)行某個(gè)python文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)
這篇文章主要介紹了提升Python效率之使用循環(huán)機(jī)制代替遞歸函數(shù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07