




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Python實(shí)現(xiàn)解析ini配置文件的示例詳解目錄楔子ini文件特殊格式小結(jié)
楔子
在開發(fā)過程中,配置文件是少不了的,只不過我們有時(shí)會(huì)將py文件作為配置文件(config.py),然后在其它的模塊中直接導(dǎo)入。這樣做是一個(gè)好主意,不過配置文件是有專門的格式的,比如:ini,yaml,toml等等。
而對(duì)于Python而言,也都有相應(yīng)的庫來解析相應(yīng)格式的文件,下面我們來看看ini文件要如何解析。
ini文件
先來了解一下ini文件的格式:
[satori]
name
=
古明地覺
age
=
16
where
=
東方地靈殿
[koishi]
name
=
古明地戀
age
=
15
where
=
東方地靈殿
[marisa]
name
=
霧雨魔理沙
age
=
17
where
=
魔法森林
;以分號(hào)或井號(hào)開頭表示注釋,不影響
ini文件總分可以分為三塊,分別是:
section:就是寫在[]里面的內(nèi)容,可以把它理解為一個(gè)段;parameter:以key=value的形式出現(xiàn),比如age=16,那么age就是key、16就是value,注意:每個(gè)section都有自己的parameter;注釋:以分號(hào)開頭,無影響,會(huì)被忽略掉。
可以看到結(jié)構(gòu)還是比較清晰的,那么Python要如何解析呢?Python解析ini文件需要使用一個(gè)名叫configparser的庫,這個(gè)庫是自帶的,我們可以直接用。
import
configparser
#
實(shí)例化一個(gè)
ConfigParser
實(shí)例
config
=
configparser.ConfigParser()
#
打開
ini
文件
config.read("cfg.ini",
encoding="utf-8")
#
獲取所有的
section
print(config.sections())
['satori',
'koishi',
'marisa']
#
獲取某一個(gè)
section
的所有
parameter
print(config["satori"])
Section:
satori
#
我們可以像操作字典一樣操作
parameter
print(list(config["satori"]))
['name',
'age',
'where']
print(list(config["satori"].values()))
['古明地覺',
'16',
'東方地靈殿']
print(list(config["satori"].items()))
[('name',
'古明地覺'),
('age',
'16'),
('where',
'東方地靈殿')]
#
獲取某個(gè)
key
對(duì)應(yīng)的
value
#
如果
key
不存在則拋出
KeyError
print(config["marisa"]["where"])
#
也可以調(diào)用
get
方法
#
在
key
不存在時(shí),指定一個(gè)默認(rèn)值
print(config["marisa"].get("age"))
#
我們發(fā)現(xiàn)
age
居然是一個(gè)字符串
#
因?yàn)槟J(rèn)解析得到的都是字符串
print(config["marisa"]["age"].__class__)
class
'str'
#
可以通過
getint
獲取
#
會(huì)將
value
轉(zhuǎn)成整型,但轉(zhuǎn)化失敗的話會(huì)報(bào)錯(cuò)
#
除了
getint
之外,還有
getfloat、getboolean
print(config["marisa"].getint("age")
==
17)
#
最后也可以直接轉(zhuǎn)成字典
print(dict(config["koishi"]))
{'name':
'古明地戀',
'age':
'15',
'where':
'東方地靈殿'}
print(dict(config))
{'DEFAULT':
Section:
DEFAULT,
'satori':
Section:
satori,
'koishi':
Section:
koishi,
'marisa':
Section:
marisa}
print({k:
dict(v)
for
k,
v
in
config.items()})
{'DEFAULT':
{},
'satori':
{'name':
'古明地覺',
'age':
'16',
'where':
'東方地靈殿'},
'koishi':
{'name':
'古明地戀',
'age':
'15',
'where':
'東方地靈殿'},
'marisa':
{'name':
'霧雨魔理沙',
'age':
'17',
'where':
'魔法森林'}}
"""
可以看到還是比較容易的,因?yàn)閕ni這種文件格式本身就很簡(jiǎn)單。除了讀取文件,我們還可以進(jìn)行寫入。
import
configparser
#
實(shí)例化一個(gè)
ConfigParser
類的實(shí)例
config
=
configparser.ConfigParser()
config["basic"]
=
{"Host":
"127.0.0.1",
"Port":
"8888",
"Username":
"satori"}
config["thread"]
=
{}
config["thread"]["name"]
=
"my_thread"
config["thread"]["num"]
=
"3"
with
open("cfg.ini",
"w",
encoding="utf-8")
as
f:
config.write(f)
雖然成功寫入了,但是我們看到結(jié)果變成了小寫。是的,對(duì)于parameter來說,無論是大寫還是小寫,寫入文件的時(shí)候都會(huì)變成小寫。然后讀取也是,無論ini文件中是大寫還是小寫,讀取之后都會(huì)變成小寫。
注意:大小寫不敏感只是針對(duì)于parameter,對(duì)于section來說還是區(qū)分大小寫的。
特殊格式
我們上面配置的parameter中的key,value都是一個(gè)普通的單詞,但其實(shí)我們還可以配置的更加復(fù)雜一些。
我們操作一波,看看能否正常解析。
import
configparser
#
實(shí)例化一個(gè)
ConfigParser
實(shí)例
config
=
configparser.ConfigParser()
#
打開
ini
文件
config.read("cfg.ini",
encoding="utf-8")
print(dict(config["簡(jiǎn)單值"]))
{'鍵':
'值',
'鍵
里面
有空格':
'合法',
'值
里面
有空格':
'也
合
法',
'等號(hào)
周圍
有
空格':
'仍然合法',
'你也使用':
'代替等號(hào)'}
print(dict(config["所有值都是字符串"]))
{'這是字符串':
'123',
'這也是字符串':
'3.14',
'整數(shù)、浮點(diǎn)數(shù)、布爾值都是字符串':
'true'}
#
true
True
yes
都可以轉(zhuǎn)成布爾值
True
#
false
False
no
都可以轉(zhuǎn)成布爾值
False
print(config["所有值都是字符串"].getboolean(
'整數(shù)、浮點(diǎn)數(shù)、布爾值都是字符串'))
print(dict(config["值占多行"]))
{'洪世賢':
'你怎么穿品如的衣服啊\n還用人東西'}
print(dict(config["值為空字符串"]))
{'key1':
'',
'key2':
''}
"""
結(jié)果是正常的,但是很明顯上面這種做法有點(diǎn)閑的沒事了,以后就統(tǒng)一寫成key=value的形式即可。另外如果ini文件中只有key沒有value的話,默認(rèn)是報(bào)錯(cuò)的,但可以通過一個(gè)參數(shù)改變這一點(diǎn):
import
configparser
#
"key
="
這種形式不叫沒有值,它是有值的,值為空字符串
#
"key"
這種形式才是沒有值,解析的時(shí)候默認(rèn)會(huì)報(bào)錯(cuò)
#
可以通過一個(gè)參數(shù)改變這一點(diǎn)
config
=
configparser.ConfigParser(allow_no_value=True)
config.read_string(
"""
[mysqld]
user
=
mysql
skip-bdb
print(dict(config["mysqld"]))
{'user':
'mysql',
'skip-bdb':
None}
"""
除此之外,name之間還可以發(fā)生引用。
import
configparser
config
=
configparser.ConfigParser()
#
可以通過
%(key)s
的方式對(duì)同一個(gè)
section
中的其它
key
進(jìn)行引用
#
所以如果想表示一個(gè)
%
的話,需要寫兩個(gè)
%,因?yàn)樯婕暗睫D(zhuǎn)義
config.read_string("""
[section1]
user
=
古明地覺
age
=
16
info
=
%(user)s--%(age)s
percent
=
80%%
print(dict(config["section1"]))
{'user':
'古明地覺',
'age':
'16',
'info':
'古明地覺--16',
'percent':
'80%'}
"""
還是很簡(jiǎn)單的,如果想引用其它的section中的name要怎么做呢?
import
configparser
#
指定該參數(shù)之后,我們就不能通過
%(name)s
的方式引用了
#
需要使用
${name}
這種格式,顯然更方便了
config
=
configparser.ConfigParser(
interpolation=configparser.ExtendedInterpolation()
config.read_string("""
[DEFAULT]
默認(rèn)的
=
自動(dòng)加入到每一個(gè)
section
中
[section1]
user
=
古明地覺
age
=
16
info
=
${user}
--
${age}
[section2]
info
=
${section1:user},
${section1:age}
print(dict(config["section1"]))
{'user':
'古明地覺',
'age':
'16',
'info':
'古明地覺
--
16',
'默認(rèn)的':
'自動(dòng)加入到每一個(gè)
section
中'}
print(dict(config["section2"]))
{'info':
'古明地覺,
16',
'默認(rèn)的':
'自動(dòng)加入到每一個(gè)
section
中'}
"""
小結(jié)
以上就是ini文件的一些簡(jiǎn)單用法,以后我們?cè)趯懪渲玫臅r(shí)候,不妨使用一些專門用來表示配置的文件格式,不一定非要寫在py文件里面。
而且使用ini等配置文件
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全隱患排查方法
- 班會(huì)課件-奮斗
- 2024年陜西高中學(xué)業(yè)水平合格性考試地理試卷真題(含答案)
- 2024年7月人工智能核心算法測(cè)試題(含答案解析)
- 7月(光纖通信)職業(yè)技能鑒定四級(jí)模考試題及答案(附解析)
- 幼兒主題教育學(xué)會(huì)分享
- 證券市場(chǎng)分層與差異化服務(wù)考核試卷
- 初中教育信息與技術(shù)融合實(shí)踐
- 羽絨制品綠色生產(chǎn)理念與實(shí)踐考核試卷
- 工業(yè)設(shè)計(jì)課件全套
- 《俄羅斯債務(wù)危機(jī)》課件
- 專題05-必修三-必過知識(shí)點(diǎn)清單(解析版)(新教材北師大版)
- 2025年廣東工業(yè)大學(xué)招聘行政助理1名歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 鐵路機(jī)車車輛制動(dòng)鉗工(高級(jí))職業(yè)鑒定考試題庫(含答案)
- 推拿培訓(xùn)協(xié)議合同范例
- 《便攜式揮發(fā)性有機(jī)物檢測(cè)儀 (PID)技術(shù)要求及監(jiān)測(cè)規(guī)范》
- 甲亢碘131治療的護(hù)理
- 2024年10月廣東省高等教育自學(xué)考試08263工程經(jīng)濟(jì)學(xué)與項(xiàng)目資源試題及答案
- 吉林交通職業(yè)技術(shù)學(xué)院《工程造價(jià)》專業(yè)人才培養(yǎng)方案3年制(2019版)
- 2024年職業(yè)培訓(xùn)學(xué)校安全管理制度范文(二篇)
- 員工培訓(xùn)流程圖
評(píng)論
0/150
提交評(píng)論