INI介紹
INI是英文“初始化”(initialization)的縮寫,被用來對作業系統或特定程式初始化或進行參數設定。由節(section)、
鍵(key)、值(value)構成。在windows系統中有很多INI檔案,例如“System32.ini”和“Win.ini”,相信大家并不陌生。Python
中操作配置檔案的子產品為configparser,這個子產品可以用來解析與Windows上INI檔案結構類似的檔案。
關于configparser
在python2中該子產品名為Configparser,到python3才改為configparser,該子產品是用來解析 ini 配置檔案的解析器。
其作用就是使用子產品中的RawConfigParser()、ConfigParser()、SafeConfigParser()這三個方法(任選一種),建立一
個對象使用對象的方法對指定的配置檔案做增删改查操作。
本次使用的python版本為3.8,編譯器使用pycharm。
INI檔案格式
INI配置檔案組成:
section:表示一個區塊,由方括号及方括号中的名稱組成,section的範圍為目前方括号到下一個方括号的内容,如“DEFAULT”,“select”,“connect_mysql”。
- 大小寫和空格檢查: section中的名稱在儲存和擷取的時候是原樣儲存和擷取的,即大小寫不一樣或者空格不一樣等都是不同的section;重複性檢查: 同一個配置檔案中section名稱不允許重複。
option:表示section中的配置項,由key、分隔符和value組成的鍵值對,如“select”下的“broswer = Chrome”。
- 大小寫檢查: key是大小寫不敏感的,儲存進檔案的時候會自動将key小寫儲存,但value是大小寫敏感的;
- 空格檢查: 通過key擷取value時,會自動将檔案中的key和value前後空格去掉再進行比對,即檔案中儲存為' broswer = Chrome '時,用'broswer'也可以擷取到對應的value值'Chrome';
- 跨多行檢查: key是不能跨行的,但是value可以跨行,隻要第二行及之後行的縮進與第一行不同即可,一直到下一個option為止;
- 重複性檢查: 和section一樣,同一section下的key是不允許重複的;
- 分隔符: 可以是等号“=”或者冒号“:”。
注釋:行注釋用井号“#”或者分号“;”表示,特别需要注意的是必須得是行開頭(前面可以有空格),用在行中間的就不會算作是注釋了。
DEFAULT:這是一個特殊的section,會用作其他section的option取不到值時的備用值,或者可以了解為它是一個root,其他的section都是它的子section,但不是必須提供的。
讀取配置檔案
import os
import configparser
conf = configparser.ConfigParser() # 類的執行個體化
curpath = os.path.dirname(os.path.realpath(__file__))
path = os.path.join(curpath,'read.ini')
conf.read(path,encoding="utf-8")
value = conf['select']['url']
print("通過read方法取得的值為:",value)
value = conf.get('login','username')
print('通過get方法取得的值:',value)
value = conf.items('login') # 讀取一個section中的所有資料,傳回一個清單
print("通過items方法取得的值:",value)
value = conf.getint('connect_mysql','port') # 指定讀取資料的類型
print("指定資料類型取出的值:",value)
section = conf.sections() # 讀取配置檔案中所有section
print(section)
運作結果
注意: 配置檔案注釋有中文的,在python3中要加上參數encoding="utf-8",不然會報錯。
conf.read(path,encoding="utf-8")
寫入配置檔案
import os
import configparser
conf = configparser.ConfigParser() # 類的執行個體化
curpath = os.path.dirname(os.path.realpath(__file__))
path = os.path.join(curpath,'read.ini')
conf.add_section('login') # 添加一個新的section
conf.set('login','username','admin')
conf.set('login','password','123123') # 往配置檔案寫入資料
conf.write(open(path,'a')) # 儲存資料
運作以後檢視配置檔案,可以看到新的section已經寫入到檔案中。
write寫入常用的兩種方式,第一種是删除原檔案内容,重新寫入:w
conf.write(open(path,'w'))
第二種是在原檔案基礎上繼續寫入内容,追加模式寫入:a
conf.write(open(path,'a'))