文章目錄
- 前言
- 初探configparser
- 配置文件
- 讀入配置:
- 讀取數(shù)據(jù)
- Section
- Section增加
- Section檢索
- Section刪除
- 高級(jí)操作
- 單個(gè)option對(duì)應(yīng)多行值
- 單個(gè)option無(wú)對(duì)應(yīng)值
- Interpolation 插值
- BasicInterpolation
- ExtendedInterpolation
- 總結(jié)
前言
configparser是Python中的一個(gè)配置文件解析庫(kù),可以讀取配置文件中的變量和值。配置文件有什么作用呢?作用就是當(dāng)你寫(xiě)程序的時(shí)候,有一些固定的值,但這些值雖然暫時(shí)不會(huì)更改,但是并不確定以后會(huì)不會(huì)改變。
例如:在你的程序中有一個(gè)變量
price = 100
為定值,但是可能一段時(shí)間后
price = 200
那么你將如何改變?也許你可以手動(dòng)一個(gè)個(gè)改,或者稍微效率高點(diǎn)的使用編輯器的替換功能(但是這樣難免保證不小心把其他變量也替換了)。這時(shí)候配置文件就有很大作用了,當(dāng)你需要改變這些變量時(shí),只需要更改配置文件,就可以輕松改變程序中所有值了。
下面,我們來(lái)開(kāi)始了解一下configparser模塊吧!
初探configparser
配置文件
首先我們需要新建一個(gè)配置文件,在Windows中一般取后綴名為
.ini
,當(dāng)然你也可以取其他的名字
.cfg
,
.txt
都行。好了,我們就新建一個(gè)
demo.ini
吧!現(xiàn)在我們朝它寫(xiě)入一些內(nèi)容:
[DEFAULT]
User =Lee
Date=2019-05-16
WeekDay=4
IsWorkDay=True
這里我們定義了一個(gè)
Section
名為
DEFAULT
,里面的字段分別為:
-
User
-
Date
-
WeekDay
-
IsWorkDay
讀入配置:
接下來(lái),我們先導(dǎo)入
configparser
,并定義一個(gè)
ConfigParser
類(lèi)
import
configparser
parser
=
configparser
.
ConfigParser
(
)
接下來(lái)讀入配置文件
configPath
=
'./demo.ini'
parser
.
read
(
configPath
)
這里是從配置文件中讀取,還有其他操作:
-
.read_dict(dictionary
:從字典中讀取。 -
.read_string(string)
:從字符串中讀取。 -
.read_file(f)
:從文件指針中讀取。eg:parser.read_file(open('./demo.ini'))
讀取數(shù)據(jù)
讀取數(shù)據(jù)可以使用類(lèi)似字典
dict
的方法:
>>
>
parser
[
'DEFAULT'
]
[
'User'
]
'Lee'
# 等價(jià)于
>>
>
parser
[
'DEFAULT'
]
[
'user'
]
'Lee'
這里我們可以發(fā)現(xiàn),文件存儲(chǔ)的形式相當(dāng)于一個(gè)字典,鍵名叫作
option
,并且
DEFAULT
段中的鍵名
User
不區(qū)分大小寫(xiě)
,但是段名
DEFAULT
還是
區(qū)分大小寫(xiě)
的。
這里我們要注意的是,文件中的所有變量都是默認(rèn)字符串形式,讀取出來(lái)的類(lèi)型都是字符串,對(duì)于其他類(lèi)型的變量,我們可以對(duì)其進(jìn)行轉(zhuǎn)換,或者使用內(nèi)置的方法,例如
WeekDay
:
>>
>
parser
.
getint
(
'DEFAULT'
,
'WeekDay'
)
4
對(duì)于
boolean
型變量,可以i使用
getboolean
方法:
>>
>
parser
.
getboolean
(
"DEFAULT"
,
"IsWorkDay"
)
True
類(lèi)似的還有
.getfloat(section, option)
返回float類(lèi)型
同樣也可以使用
get()
方法取字段中的
option
:
>>
>
parser
.
get
(
"DEFAULT"
,
"IsWorkDay"
)
'True'
這里比較推薦使用
get()
方法,因?yàn)樽侄沃胁淮嬖谀硞€(gè)
option
時(shí),使用類(lèi)似字典的方法會(huì)報(bào)錯(cuò),而使用
get()
方法就可以設(shè)置
fallback
值,表示當(dāng)不存在時(shí)返回的默認(rèn)值。
>>
>
parser
[
'DEFAULT'
]
[
'does-not-exist'
]
Traceback
(
most recent call last
)
:
.
.
.
KeyError
:
'does-not-exist'
>>
>
parser
.
get
(
"DEFAULT"
,
"does-not-exist"
,
fallback
=
""
)
''
這里我們?cè)O(shè)置了
fallback
為空,因此當(dāng)
option
不存在時(shí),返回空串而不是報(bào)錯(cuò)。
Section
Section增加
接下來(lái)我們要新增一個(gè)
Section
段,我們可以直接在配置文件中加入:
[
DEFAULT
]
User
=
Lee
Date
=
2019
-
05
-
16
WeekDay
=
4
IsWorkDay
=
True
# 新增Section1
[
Section1
]
Year
=
2019
Month
=
5
Day
=
16
Language
=
Pythoon
FilePath
=
.
/
demo
.
ini
也可以在代碼中寫(xiě)入:
parser
[
'Section1'
]
=
{
"Year"
:
2019
,
"Month"
:
5
,
"Day"
:
16
,
"Language"
:
"Python"
,
"FilePath"
:
"./demo.ini"
}
這里雖然我們寫(xiě)入的時(shí)候
Year
,
Month
,
Day
都為數(shù)值類(lèi)型,但是默認(rèn)是字符串,因此當(dāng)你輸出的時(shí)候還是字符串:
>>
>
parser
.
get
(
'Section1'
,
'Year'
)
'2019'
我們還可以這樣寫(xiě)入:
>>
>
parser
.
add_section
(
'Section1'
)
>>
>
parser
.
set
(
"Section1"
,
"Year"
,
"2019"
)
# 注意這里option的值必須為字符串類(lèi)型
Section檢索
我們可以查看是否存在
Section
:
>>
>
parser
.
has_section
(
'Section1'
)
True
同理也可以查看是否存在
option
:
>>
>
parser
.
has_option
(
'Section1'
,
'Year'
)
True
我們可以查看目前有幾個(gè)
Section
:
>>
>
parser
.
sections
(
)
[
'Section1'
]
怎么沒(méi)有
DEFAULT
?
因?yàn)?
DEFAULT
是配置文件中的默認(rèn)字段,不屬于一個(gè)
Section
查看
Section
中的
option
:
>>
>
parser
.
options
(
'Section1'
)
[
'year'
,
'month'
,
'day'
,
'language'
,
'filepath'
,
'user'
,
'date'
,
'weekday'
,
'isworkday'
]
你會(huì)發(fā)現(xiàn),它不止返回了
Section
中的
option
,還返回了
DEFAULT
中的
option
,并且這個(gè)
DEFAULT
你無(wú)法在代碼中刪除它。
我們?cè)谖募?nèi)容中將其改名為
Section0
:
[
Section0
]
User
=
Lee
Date
=
2019
-
05
-
16
WeekDay
=
4
IsWorkDay
=
True
[
Section1
]
Year
=
2019
Month
=
5
Day
=
16
Language
=
Pythoon
FilePath
=
.
/
demo
.
ini
然后
>>
>
parser
.
sections
(
)
[
'Section0'
,
'Section1'
]
>>
>
parser
.
options
(
'Section1'
)
[
'year'
,
'month'
,
'day'
,
'language'
,
'filepath'
]
好了這樣舒服多了。
還可以查看某個(gè)
Section
中的
option
對(duì):
>>
>
parser
.
items
(
"Section1"
)
[
(
'year'
,
'2019'
)
,
(
'month'
,
'5'
)
,
(
'day'
,
'16'
)
,
(
'language'
,
'Pythoon'
)
,
(
'filepath'
,
'./demo.ini'
)
]
Section刪除
刪除一個(gè)
Section
可以使用
.remove_section()
方法:
>>
>
parser
.
remove_section
(
"Section1"
)
True
還有其他類(lèi)似操作:
-
.popitem()
,刪除最上面的一個(gè)Section
并返回,如果空則報(bào)錯(cuò)(類(lèi)似棧的彈出) -
.clear()
,刪除所有Section
-
.remove_option(section, option)
刪除某個(gè)Section
中的option
高級(jí)操作
單個(gè)option對(duì)應(yīng)多行值
更改下配置文件中
Section0
的內(nèi)容
[
Section0
]
User
=
Lee
James
# 注意前面必須縮進(jìn)!
Michael
Date
=
2019
-
05
-
16
WeekDay
=
4
IsWorkDay
=
True
使得單個(gè)
option
對(duì)應(yīng)多個(gè)值
Lee``James``Michael
>>
>
print
(
parser
[
"Section0"
]
[
"user"
]
)
Lee
James
Michael
單個(gè)option無(wú)對(duì)應(yīng)值
[
Section0
]
User
=
Lee
James # 注意前面必須縮進(jìn)!
Michael
Date
=
2019
-
05
-
16
Tomorrow # 無(wú)對(duì)應(yīng)值
WeekDay
=
4
Today # 無(wú)對(duì)應(yīng)值
IsWorkDay
=
True
這里我們?cè)黾恿藘蓚€(gè)無(wú)對(duì)應(yīng)值的
option
,但是注意:
開(kāi)頭必須設(shè)置
allow_no_value=True
parser
=
configparser
.
ConfigParser
(
allow_no_value
=
True
)
然后,讀取所有
option
:
>>
>
parser
.
options
(
"Section0"
)
[
'user'
,
'date'
,
'tomorrow'
,
'weekday'
,
'today'
,
'isworkday'
]
>>
>
parser
.
get
(
"Section0"
,
"Tomorrow"
)
# 輸出空
Interpolation 插值
BasicInterpolation
BasicInterpolation
是默認(rèn)的
Interpolation
類(lèi),我們可以定義類(lèi)似占位符一樣的形式來(lái)進(jìn)行插值操作,我們先修改
Section0
如下:
[
Section0
]
Year
=
2019
Month
=
5
Day
=
16
Date
=
%
(
Year
)
s
-
%
(
Month
)
s
-
%
(
Day
)
s
>>
>
parser
.
get
(
"Section0"
,
"Date"
)
'2019-5-16'
這里我們利用的是類(lèi)似C語(yǔ)言中的
%s
,形式為
%(option)s
parser
.
get
(
"Section0"
,
"Date"
,
raw
=
True
)
# 許多方法都有這個(gè)raw參數(shù)來(lái)輸出raw字符串
或者在開(kāi)頭定義
parser
時(shí)設(shè)置:
parser
=
ConfigParser
(
interpolation
=
None
)
輸出則變成:
>>
>
parser
.
get
(
"Section0"
,
"Date"
)
'%(Year)s-%(Month)s-%(Day)s'
ExtendedInterpolation
或者我們可以使用
ExtendedInterpolation()
類(lèi)
修改
Section0
如下:
[
Section0
]
Year
=
2019
Month
=
5
Day
=
16
Date
=
$
{
Year
}
-
$
{
Month
}
-
$
{
Day
}
得到同樣的效果
>>
>
parser
.
get
(
"Section0"
,
"Date"
)
'2019-5-16'
注意這時(shí)候格式是:
${section:option}
,也就是可以設(shè)置某個(gè)
Section
中的某個(gè)
option
,即可以使用別的段中的
option
,比如我們修改文件內(nèi)容如下:
[
Section0
]
Date
=
$
{
Section1
:
Year
}
-
$
{
Section1
:
Month
}
-
$
{
Section1
:
Day
}
[
Section1
]
Year
=
2019
Month
=
5
Day
=
16
一樣的結(jié)果:
>>
>
parser
.
get
(
"Section0"
,
"Date"
)
'2019-5-16'
總結(jié)
.ini
文件中:
- 文件中的任何變量形式都是字符串
-
option
對(duì)可以用=
或:
來(lái)表示鍵值對(duì)應(yīng) -
option
鍵名不區(qū)分大小寫(xiě),Section
名區(qū)分 - 文件中多余的空白符會(huì)被默認(rèn)去掉
-
option
的值可以多行,也可為空 -
注釋以
#
或者;
開(kāi)頭
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
