久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python開發(fā)項(xiàng)目,,不得不了解的.cfg配置文件

 文炳春秋 2020-07-17

安裝軟件時(shí),,經(jīng)常會(huì)見到后綴為.cfg,、.ini的文件,,一般我們不用管,只要不刪就行,。因?yàn)檫@些是程序安裝,、運(yùn)行時(shí)需要用到的配置文件,。但對(duì)開發(fā)者來說,這種文件是怎么回事就必須搞清了,。本文從.cfg文件的創(chuàng)建,、編輯修改到使用等方面,進(jìn)行解讀,,幫助大家掌握配置文件,。

python開發(fā)項(xiàng)目,不得不了解的.cfg配置文件

一,、配置文件的作用

配置文件的作用是保存一些在程序運(yùn)行時(shí)需用到的參數(shù),,在程序運(yùn)行過程中,通過代碼讀取配置文件獲得參數(shù),,保障程序的正常運(yùn)行,。如果誤刪了配置文件,代碼取不到數(shù)據(jù),,程序也就無法正常運(yùn)行了,。配置文件一般保存的參數(shù)有:

1)使用數(shù)據(jù)庫(kù)的程序,程序與數(shù)據(jù)庫(kù)的連接參數(shù),,常常被寫入配置文件讀取調(diào)用,;

2)有登錄賬號(hào)、密碼的程序,,登錄名及賬號(hào)信息一般也會(huì)寫入配置文件,。當(dāng)程序運(yùn)行到登錄界面時(shí),只需讀取配置文件,,就能對(duì)登錄信息進(jìn)行判斷,,而不必運(yùn)行到主程序,提高運(yùn)行效率,。

3)桌面程序界面設(shè)置信息等

這里需要注意的是,,不是所有的程序都必須有配置文件。因?yàn)榕渲梦募淖饔谜f白了也就是單獨(dú)存儲(chǔ)數(shù)據(jù),,如果項(xiàng)目很小,用到的數(shù)據(jù)很少,,就沒有弄配置文件的必要,, 直接把數(shù)據(jù)寫在代碼里就可以了。

python開發(fā)項(xiàng)目,,不得不了解的.cfg配置文件

二,、配置文件的后綴格式

很多人奇怪為什么配置文件的后綴格式.cfg是什么意思,而有時(shí).ini,、.xml,、.dat格式文件也叫配置文件?其實(shí),知道了配置文件的本質(zhì)和項(xiàng)目開發(fā)習(xí)慣就明白了,。首先,,配置文件的本質(zhì)就是文本文件,能直接用記事本打開,、編輯,。文件的后綴,可以是.txt,,也可以根據(jù)自己的意愿隨便修改,,比如改為.cfg,.ini等都是沒問題的,。

雖然配置文件的后綴可以根據(jù)自己的喜好隨意定,,但也不是任何時(shí)候想改就改的。因?yàn)榕渲梦募暮缶Y格式已經(jīng)寫入到程序代碼里了,,如果中途修改后綴,,而代碼里還是原后綴格式,就會(huì)造成找不到配置文件導(dǎo)致程序運(yùn)行不了的后果,。比如,,原配置文件為cg.cfg,一般代碼里會(huì)有這樣的讀取語(yǔ)句:

cp.read('source\cg.cfg')

如果將配置文件修改為cg.ini,,則須修改代碼語(yǔ)句為:

cp.read('source\cg.ini')

否則,,若還是cp.read('source\cg.cfg')語(yǔ)句,就找不到模配置文件,,報(bào)錯(cuò),。而我們安裝軟件時(shí),是不可能改代碼的,。所以,,面對(duì)安裝包里的配置文件,正確做法就是不管,,不刪不改不移動(dòng)就行,。

為提高代碼的通用性和可讀性,項(xiàng)目開發(fā)時(shí)會(huì)提前約定好固定的后綴作為配置文件的格式,,這就是項(xiàng)目開發(fā)習(xí)慣的結(jié)果,。所以現(xiàn)在一般只要看到.cfg、.ini等后綴的文件,,就知道這是配置文件,。若突然換了個(gè)個(gè)性的后綴,就容易讓人蒙圈,。

所以后綴.cfg沒有特殊的含義,,只是約定的習(xí)慣用法而已,,只不過不止約定了這一種,還約定了.ini,、.dat,、.xml等,所以.ini,、.xml,、.dat格式文件都叫配置文件

三,、配置文件里內(nèi)容的格式

和文件后綴格式可以隨便自定義不同,,配置文件里內(nèi)容的格式要求很嚴(yán)格,內(nèi)容樣式為:

[section]  

option = value

...

其中:section為節(jié)點(diǎn),,用中括號(hào)括起來,;option為鍵,value為鍵對(duì)應(yīng)的值,,option= value構(gòu)成鍵值對(duì),,一個(gè)鍵只對(duì)應(yīng)一個(gè)值,同一個(gè)section節(jié)點(diǎn)下option鍵不能重復(fù)出現(xiàn),。

如下圖,,節(jié)點(diǎn)(section)[rew]下出現(xiàn)了兩個(gè)相同的鍵(option)name:

python開發(fā)項(xiàng)目,不得不了解的.cfg配置文件

運(yùn)行python讀取該文件代碼:cp.read('1.txt')時(shí),,會(huì)提示報(bào)錯(cuò):

configparser.DuplicateOptionError: While reading from '1.txt' [line 3]: option 'name' in section 'rew' already exists

意思是第3行的option'name'在節(jié)點(diǎn)section‘rew’里已存在,。

四、配置文件的創(chuàng)建,、寫入數(shù)據(jù)

了解了配置文件的本質(zhì)是文本文件,,且后綴可隨意更改的特點(diǎn)后,文件的創(chuàng)建和修改就簡(jiǎn)單了,。直接用記事本創(chuàng)建文件,,按內(nèi)容格式要求寫好數(shù)據(jù)后,將文件保存為后綴為.cfg或其他擬定的后綴格式文件即可,。也可以直接用代碼方法:用open('confg.cfg', 'w')函數(shù)可以在當(dāng)前文件夾下創(chuàng)建名為“confg.cfg”的文件,,'w'參數(shù)代表可以向文件寫入數(shù)據(jù),然后用write(f),,將文件保存下來,。如下面的代碼

from configparser import ConfigParser
cp = ConfigParser()
cp.add_section('test1')
cp.set('test1', 'name', '張三')
cp.set('test1', 'sn', '123456')
with open('confg.cfg', 'w') as f:
cp.write(f)

運(yùn)行后即生成的了保存有兩條信息的confg.cfg文件,右鍵用記事本打開查看,,結(jié)果為:

python開發(fā)項(xiàng)目,不得不了解的.cfg配置文件

五,、配置文件的常用操作函數(shù)

上面我們創(chuàng)建并寫入了配置文件內(nèi)容,,有時(shí),,我們需要在程序運(yùn)行過程中,根據(jù)用戶交互信息,,自動(dòng)修改配置文件信息,,這就只能用代碼了。python的ConfigParser模塊下有多個(gè)操作配置文件的函數(shù),,常用的有10個(gè),,具體如下:

1、read(file.cfg):讀取配置文件

from configparser import ConfigParser
cp = ConfigParser()
cp.read('confg.cfg')

2,、set(section, name, value):新增項(xiàng)目(name:“李四”,,sn:‘123’),新增時(shí),,節(jié)點(diǎn)(section)下不能存在為‘李四’的項(xiàng)目鍵(name),,否則就變成了修改鍵對(duì)應(yīng)的值,如下面第3條,。

cp.set('test1', '李四', '123')

3,、set(section, name, value):將配置文件里的“李四”對(duì)應(yīng)sn修改為新sn“666”

cp.set('test1', '李四', '666')  # 將原sn:123,該為新sn:666

4,、remove(section, name):刪除項(xiàng)目

cp.remove_section('test2')  #如果文件里沒有test2節(jié)點(diǎn),,就無法刪除,會(huì)報(bào)錯(cuò),,所以一般要先判斷是否存在該節(jié)點(diǎn),。

5、has_section(section):判斷是否存在節(jié)點(diǎn)

cp.add_section('test2')

6,、add_section(section):增加節(jié)點(diǎn)

cp.add_section('test2')

注意:不能增加已經(jīng)存在的section,,為了避免出錯(cuò),可先判斷是否存在節(jié)點(diǎn)(section),。

7,、sections():得到所有的section,返回結(jié)果為列表

from configparser import ConfigParser
cp = ConfigParser()
cp.add_section('test1')
cp.set('test1', 'name', '張三')
cp.set('test1', 'sn', '123456')
cp.add_section('test2')
cp.set('test2', 'name', '張')
cp.set('test2', 'sn', '123')
with open('confg.cfg', 'w') as f:
cp.write(f)
cp.read('confg.cfg')
print(cp.sections())

運(yùn)行結(jié)果為:['test1', 'test2']

8,、options(section) :得到section下的所有option (key值),,返回結(jié)果為列表

from configparser import ConfigParser
cp = ConfigParser()
cp.read('confg.cfg')
print(cp.options('test1'))

運(yùn)行結(jié)果為:['name', 'sn']

9、items(section):得到section的所有鍵值對(duì)

from configparser import ConfigParser
cp = ConfigParser()
cp.read('confg.cfg')
print(cp.items('test1'))

運(yùn)行結(jié)果為:[('name', '張三'), ('sn', '123456')]

10,、get(section, option):得到section中option的值,,返回為string類型

from configparser import ConfigParser
cp = ConfigParser()
cp.read('confg.cfg')
print(cp.get('test1', 'name'))

運(yùn)行結(jié)果:張三

11、getint(section, option):得到section中的option值,,返回為int類型

from configparser import ConfigParser
cp = ConfigParser()
cp.read('confg.cfg')
print(cp.getint('test1', 'sn'),type(cp.getint('test1', 'sn')))

運(yùn)行結(jié)果:123456 <class 'int'>

6,、試用

了解了這些后,我們可以試著找一些軟件配置文件,,打開看數(shù)據(jù)都是些什么格式,。比如,,下圖是SQL SERVER安裝包里帶的一個(gè)配置文件的內(nèi)容,注意該配置文件后綴是.ini,,用記事本打開查看:

python開發(fā)項(xiàng)目,,不得不了解的.cfg配置文件

注意著里面的第一行是分號(hào)開頭的字符串,在我們正常的python3,環(huán)境下讀取時(shí)會(huì)報(bào)錯(cuò),,將分號(hào)改為python里的注釋符即可,。

異常錯(cuò)誤處理

用ConfigParser模塊的read函數(shù)讀取配置文件時(shí),偶爾會(huì)出現(xiàn)一種奇怪的錯(cuò)誤,,提示為

configparser.MissingSectionHeaderError:File contains no section headers,,

具體是將配置文件的第一行讀取為:'锘縖sql_connect]\n',而實(shí)際是'[sql_connect]',。

這種錯(cuò)誤很無語(yǔ),,很讓初次見到的人崩潰。其實(shí),,這種錯(cuò)誤是因?yàn)閣indows讀取配置文件時(shí),,額外追加了亂碼信息導(dǎo)致。如何消除亂碼,,有人用字符替換,,有人通過保存配置文件時(shí)修改編碼方式,逐一試過后,,都沒起作用,,看來不是特效藥。最后,,找到了一個(gè)最簡(jiǎn)單的辦法,,重建一個(gè)同名的文件,將配置文件里的內(nèi)容復(fù)制粘貼過去就好,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約