【python介面自動化】- ConfigParser配置檔案的使用

miki_peng發表於2020-08-03

前言:目前我們使用的絕大多數計算機程式,無論是辦公軟體,瀏覽器,甚至遊戲、視訊都是通過選單介面系統配置的,它幾乎成了我們使用機器的預設方式。而在python中,也有這樣的一個配置模組可以把程式碼可配置化。

什麼是配置檔案

​ 這裡的配置檔案不同於我們平常所見的視覺化的選單介面,它是像程式碼形式的,如下示例:

【python介面自動化】- ConfigParser配置檔案的使用

​ ❓為什麼要做配置檔案?

​ ✔️讓程式碼和配置都變成可模組化可配置化,提高程式碼的重用性,那什麼時候把它變成可配置化呢?多處地方都用到一個引數時,經常會變化的引數等,都可以可配置化,我們只需要在配置檔案中進行修改即可,不需要在程式碼中一處處的重複修改。

​ Python提供了一個ConfigParser模組,它實現了一種基本的配置檔案解析器語言,該語言提供的結構類似於.ini檔案中的結構。常見的配置檔案格式有.ini.conf.cfg,配置檔案由兩個檔案物件組成:section和option,一個配置檔案裡可以包含一個或多個節(section),每個節可以有多個option(鍵=值),如上圖所標示。

讀取配置檔案

​ 它與file檔案一樣,需要先開啟才能進行讀取操作,常用方法如下:

  • read(filename):直接讀取配置檔案內容
  • sections():以列表的形式返回所有section
  • options(section):得到對應section下的所有option
  • items(section):得到對應section下的所有鍵值對
  • get(section,option):得到對應的section中的option的值,並以string的型別返回
  • getint(section,option):得到對應的section中的option的值,並以int的型別返回

​ 以上圖中的conf.ini為例進行讀取操作:

from configparser import ConfigParser

# 建立一個操作配置檔案的物件(檔案解析物件)
conf = ConfigParser()

# 讀取配置檔案
conf.read("conf.ini", encoding="utf8")
# 獲取所有section
res2 = conf.sections()
print("這是res2:{}\n".format(res2))
# 獲取對應section下的option
res3 = conf.options("logging")
print("這是res3:{}\n".format(res3))
# 獲取對應section下的所有鍵值對
res4 = conf.items("logging")
print("這是res4:{}\n".format(res4))
# get方法:讀取出來的內容,都是字串
res5 = conf.get("logging", "level")
print("這是res5:{}".format(res5), type(res5))
# getint方法:讀取出來的內容,都是int型別
res6 = conf.getint("mysql", "port")
print("\n這是res6:{}".format(res6), type(res6))

​ 執行結果:

C:\software\python\python.exe D:/learn/test.py
這是res2:['logging', 'mysql']

這是res3:['level', 'f_level', 's_level']

這是res4:[('level', 'DEBUG'), ('f_level', 'DEBUG'), ('s_level', 'ERROR')]

這是res5:DEBUG <class 'str'>

這是res6:3306 <class 'int'>

Process finished with exit code 0

​ 除了可以讀取str、int型別以外,還支援float、boolean,這裡就不再舉例。

​ ? 小知識:

  • 鍵值對可用=也可用:進行分隔
  • section名稱是區分大小寫的,而option不區分
  • 鍵值對中,首尾若有空白符會被去掉
  • 配置檔案中也可以寫入註釋,註釋以#或者;為字首

寫入配置檔案

​ 基本的寫入方法如下:

  • add_section(section) :新增一個新的section
  • set( section, option, value) :對section中的option進行設定,需要呼叫write將內容寫入配置檔案
from configparser import ConfigParser

# 建立一個操作配置檔案的物件(檔案解析物件)
conf = ConfigParser()
conf.add_section('test')
conf.set('test', 'name', 'Amy')
conf.write(open('conf.ini', "a", encoding="utf-8"))

​ 執行後檢視conf.ini檔案裡面的內容:

【python介面自動化】- ConfigParser配置檔案的使用

ConfigParser的封裝

​ 一次封裝,一勞永逸,之後直接呼叫即可,封裝內容按需。

from configparser import ConfigParser


class MyConf:

    def __init__(self, filename, encoding="utf8"):
        self.filename = filename
        self.encoding = encoding
        self.conf = ConfigParser()
        self.conf.read(filename, encoding)

    def get_str(self, section, option):
        return self.conf.get(section, option)

    def get_int(self, section, option):
        return self.conf.getint(section, option)

    def get_float(self, section, option):
        return self.conf.getfloat(section, option)

    def get_bool(self, section, option):

    def write_data(self, section, option, value):
        self.conf.set(section, option, value)
        self.conf.write(open(self.filename, "a", encoding=self.encoding))
        

if __name__ == '__main__':
    print(conf.get_str("conf.ini", "test","name"))	# 測試

相關文章