Python學(xué)習(xí)之configparser模塊的使用詳解
1 configparser安裝
pip3 install configparser
2 configparser簡介
用來讀取配置文件的python包;
一般做自動化測試的時候,會使用到這個模塊,用來封裝一些常量。比如數(shù)據(jù)庫、郵件、用戶名密碼、項(xiàng)目常量等等;
這個使用根據(jù)個人喜好和項(xiàng)目來確定,不一定一定要使用這個模塊,也可以使用其它的方法做配置,比如py文件、xml、excel、yaml、json等等。
configparser源碼大約1360行左右,通讀源碼可有效了解該模塊的使用。本文只做簡單介紹常用的方法。
3 表示方法
- 新建一個名為
conf.py文件; - 寫入如下數(shù)據(jù),格式如下:
[mysqldb] sql_host = 127.0.0.1 sql_port = 3699 sql_user = root sql_pass = 123456 [mailinfo] name = NoamaNelson passwd = 123456 address = 123456@qq.com
4 configparser詳細(xì)使用
4.1 對象初始化
寫入如下代碼,把對象初始化。
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/11/19
# 文件名稱:conf.py
# 作用:configparser模塊的使用
# 聯(lián)系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import configparser
import os
class Conf:
def __init__(self):
self.conf = configparser.ConfigParser()
self.root_path = os.path.dirname(os.path.abspath(__file__))
self.f = os.path.join(self.root_path + "/config.conf")
self.conf.read(self.f)4.2 獲取所有的sections
def read_sections(self):
print(f"1、獲取所有的sections:{self.conf.sections()}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
4.3 獲取所有的sections對應(yīng)的options
def read_options(self, s1, s2):
print(f"2、獲取mysqldb所有的options:{self.conf.options(s1)}")
print(f"3、獲取mailinfo所有的options:{self.conf.options(s2)}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4.4 read方法和get方法,獲取指定section下的option值
read是讀取配置文件,如self.conf.read(self.f)是讀取指定config.conf文件;get是獲取具體的值;
def read_conf(self, m, n):
name = self.conf.get(m, n) # 獲取指定section的option值
print(f"4、獲取指定section:{m}下的option:{n}的值為{name}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
4.5 items方法,獲取指點(diǎn)section所用配置信息
def get_items(self, m, n):
print(f"5、獲取sectoion:{m}下的配置信息為:{self.conf.items(m)}")
print(f"6、獲取sectoion:{n}下的配置信息為:{self.conf.items(n)}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
5、獲取sectoion:mysqldb下的配置信息為:[('sql_host', '127.0.0.1'), ('sql_port', '3699'), ('sql_user', 'root'), ('sql_pass', '123456')]
6、獲取sectoion:mailinfo下的配置信息為:[('name', 'NoamaNelson'), ('passwd', '123456'), ('address', '123456@qq.com')]
4.6 set和write方法,修改某個option的值
如果option不存在則創(chuàng)建它;
def set_option(self, m, n, s):
self.conf.set(m, n, s)
self.conf.write(open(self.f, "w"))
print(f"7、設(shè)置setion:{m}下的option:{n}的值為:{s}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")
aa.set_option("mysqldb", "sql_name", "游客")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
5、獲取sectoion:mysqldb下的配置信息為:[('sql_host', '127.0.0.1'), ('sql_port', '3699'), ('sql_user', 'root'), ('sql_pass', '123456')]
6、獲取sectoion:mailinfo下的配置信息為:[('name', 'NoamaNelson'), ('passwd', '123456'), ('address', '123456@qq.com')]
7、設(shè)置setion:mysqldb下的option:sql_name的值為:游客
因?yàn)橹暗呐渲梦募袥]有sql_name,所以會新創(chuàng)建它,如果創(chuàng)建的內(nèi)容存在,直接修改對應(yīng)的值;

4.7 has_section和has_option方法
has_section方法檢查對應(yīng)的section是否存在;has_option方法檢查對應(yīng)的option是否存在;
def has_s_o(self, s, o):
print(f"8、檢查section:{s}是否存在:{self.conf.has_section(s)}")
print(f"9、檢查section:{s}下的option:{o}是否存在:{self.conf.has_option(s, o)}")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")
aa.set_option("mysqldb", "sql_name", "游客")
aa.has_s_o("mysqldb", "sql_name")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass', 'sql_name']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
5、獲取sectoion:mysqldb下的配置信息為:[('sql_host', '127.0.0.1'), ('sql_port', '3699'), ('sql_user', 'root'), ('sql_pass', '123456'), ('sql_name', '游客')]
6、獲取sectoion:mailinfo下的配置信息為:[('name', 'NoamaNelson'), ('passwd', '123456'), ('address', '123456@qq.com')]
7、設(shè)置setion:mysqldb下的option:sql_name的值為:游客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
4.8 add_section方法,添加section和option
add_section:添加section;
添加前:

def add_s_o(self, s, o, v):
if not self.conf.has_section(s):
self.conf.add_section(s)
print(f"10、添加新的section為{s}")
else:
print(f"10、添加新的section為{s}已經(jīng)存在,無需添加!")
if not self.conf.has_option(s, o):
self.conf.set(s, o, v)
print(f"11、要添加的option為{o}, 值為{v}")
else:
print(f"11、要添加的option為{o}, 值為{v},已經(jīng)存在,無需添加!")
self.conf.write(open(self.f, "w"))
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")
aa.set_option("mysqldb", "sql_name", "游客")
aa.has_s_o("mysqldb", "sql_name")
aa.add_s_o("login", "name", "root")添加后:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass', 'sql_name']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
5、獲取sectoion:mysqldb下的配置信息為:[('sql_host', '127.0.0.1'), ('sql_port', '3699'), ('sql_user', 'root'), ('sql_pass', '123456'), ('sql_name', '游客')]
6、獲取sectoion:mailinfo下的配置信息為:[('name', 'NoamaNelson'), ('passwd', '123456'), ('address', '123456@qq.com')]
7、設(shè)置setion:mysqldb下的option:sql_name的值為:游客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
10、添加新的section為login
11、要添加的option為name, 值為root

再次運(yùn)行代碼,會提示已經(jīng)存在:
10、添加新的section為login已經(jīng)存在,無需添加!
11、要添加的option為name, 值為root,已經(jīng)存在,無需添加!
4.9 remove_section和remove_option方法,刪除section和option
def remove_s_o(self, s, o):
if self.conf.has_section(s):
self.conf.remove_section(s)
print(f"12、刪除section:{s}==OK!")
else:
print(f"12、要刪除的section:{s}不存在,不用刪除!")
if self.conf.has_option(s, o):
self.conf.remove_option(s, o)
print(f"13、刪除section:{s}下的option:{o}==OK!")
else:
print(f"13、要刪除的section:{s}下的option:{o}不存在,不用刪除!")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")
aa.set_option("mysqldb", "sql_name", "游客")
aa.has_s_o("mysqldb", "sql_name")
aa.add_s_o("login", "name", "root")
aa.remove_s_o("login", "name")結(jié)果為:
D:\Python37\python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo', 'login']
2、獲取mysqldb所有的options:['sql_host', 'sql_port', 'sql_user', 'sql_pass', 'sql_name']
3、獲取mailinfo所有的options:['name', 'passwd', 'address']
4、獲取指定section:mysqldb下的option:sql_host的值為127.0.0.1
5、獲取sectoion:mysqldb下的配置信息為:[('sql_host', '127.0.0.1'), ('sql_port', '3699'), ('sql_user', 'root'), ('sql_pass', '123456'), ('sql_name', '游客')]
6、獲取sectoion:mailinfo下的配置信息為:[('name', 'NoamaNelson'), ('passwd', '123456'), ('address', '123456@qq.com')]
7、設(shè)置setion:mysqldb下的option:sql_name的值為:游客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
10、添加新的section為login已經(jīng)存在,無需添加!
11、要添加的option為name, 值為root,已經(jīng)存在,無需添加!
12、刪除section:login==OK!
13、要刪除的section:login下的option:name不存在,不用刪除!
5 configparser常見的異常
| 異常 | 描述 |
|---|---|
| ConfigParser.Error | 所有異常的基類 |
| ConfigParser.NoSectionError | 指定的section沒有找到 |
| ConfigParser.DuplicateSectionError | 調(diào)用add_section() 時,section名稱已經(jīng)被使用 |
| ConfigParser.NoOptionError | 指定的參數(shù)沒有找到 |
| ConfigParser.InterpolationError | 當(dāng)執(zhí)行字符串插值時出現(xiàn)問題時,出現(xiàn)異常的基類 |
| ConfigParser.InterpolationDepthError | 當(dāng)字符串插值無法完成時,因?yàn)榈螖?shù)超過了最大的范圍,所以無法完成。InterpolationError的子類 |
| InterpolationMissingOptionError | 當(dāng)引用的選項(xiàng)不存在時,會出現(xiàn)異常。InterpolationError的子類 |
| ConfigParser.InterpolationSyntaxError | 當(dāng)產(chǎn)生替換的源文本不符合所需的語法時,就會出現(xiàn)異常。InterpolationError的子類。 |
| ConfigParser.MissingSectionHeaderError | 當(dāng)試圖解析一個沒有分段標(biāo)題的文件時,會出現(xiàn)異常。 |
| ConfigParser.ParsingError | 當(dāng)試圖解析文件時發(fā)生錯誤時,會出現(xiàn)異常 |
| ConfigParser.MAX_INTERPOLATION_DEPTH | 當(dāng)raw參數(shù)為false時,get()的遞歸插值的最大深度。這只適用于ConfigParser類 |
6 本文所有源碼
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2021/11/19
# 文件名稱:conf.py
# 作用:configparser模塊的使用
# 聯(lián)系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson
import configparser
import os
class Conf:
def __init__(self):
self.conf = configparser.ConfigParser()
self.root_path = os.path.dirname(os.path.abspath(__file__))
self.f = os.path.join(self.root_path + "/config.conf")
self.conf.read(self.f)
def read_sections(self):
print(f"1、獲取所有的sections:{self.conf.sections()}")
def read_options(self, s1, s2):
print(f"2、獲取mysqldb所有的options:{self.conf.options(s1)}")
print(f"3、獲取mailinfo所有的options:{self.conf.options(s2)}")
def read_conf(self, m, n):
name = self.conf.get(m, n) # 獲取指定section的option值
print(f"4、獲取指定section:{m}下的option:{n}的值為{name}")
def get_items(self, m, n):
print(f"5、獲取sectoion:{m}下的配置信息為:{self.conf.items(m)}")
print(f"6、獲取sectoion:{n}下的配置信息為:{self.conf.items(n)}")
def set_option(self, m, n, s):
self.conf.set(m, n, s)
self.conf.write(open(self.f, "w"))
print(f"7、設(shè)置setion:{m}下的option:{n}的值為:{s}")
def has_s_o(self, s, o):
print(f"8、檢查section:{s}是否存在:{self.conf.has_section(s)}")
print(f"9、檢查section:{s}下的option:{o}是否存在:{self.conf.has_option(s, o)}")
def add_s_o(self, s, o, v):
if not self.conf.has_section(s):
self.conf.add_section(s)
print(f"10、添加新的section為{s}")
else:
print(f"10、添加新的section為{s}已經(jīng)存在,無需添加!")
if not self.conf.has_option(s, o):
self.conf.set(s, o, v)
print(f"11、要添加的option為{o}, 值為{v}")
else:
print(f"11、要添加的option為{o}, 值為{v},已經(jīng)存在,無需添加!")
self.conf.write(open(self.f, "w"))
def remove_s_o(self, s, o):
if self.conf.has_section(s):
self.conf.remove_section(s)
print(f"12、刪除section:{s}==OK!")
else:
print(f"12、要刪除的section:{s}不存在,不用刪除!")
if self.conf.has_option(s, o):
self.conf.remove_option(s, o)
print(f"13、刪除section:{s}下的option:{o}==OK!")
else:
print(f"13、要刪除的section:{s}下的option:{o}不存在,不用刪除!")
if __name__ == "__main__":
aa = Conf()
aa.read_sections()
aa.read_options("mysqldb", "mailinfo")
aa.read_conf("mysqldb", "sql_host")
aa.get_items("mysqldb", "mailinfo")
aa.set_option("mysqldb", "sql_name", "游客")
aa.has_s_o("mysqldb", "sql_name")
aa.add_s_o("login", "name", "root")
aa.remove_s_o("login", "name")到此這篇關(guān)于Python學(xué)習(xí)之configparser模塊的使用詳解的文章就介紹到這了,更多相關(guān)Python configparser模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

