<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pip3 install configparser
用來讀取組態檔的python包;
一般做自動化測試的時候,會使用到這個模組,用來封裝一些常數。比如資料庫、郵件、使用者名稱密碼、專案常數等等;
這個使用根據個人喜好和專案來確定,不一定一定要使用這個模組,也可以使用其它的方法做設定,比如py檔案、xml、excel、yaml、json等等。
configparser原始碼大約1360行左右,通讀原始碼可有效瞭解該模組的使用。本文只做簡單介紹常用的方法。
conf.py
檔案;[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
寫入如下程式碼,把物件初始化。
# -*- coding:utf-8 -*- # 作者:NoamaNelson # 日期:2021/11/19 # 檔名稱:conf.py # 作用:configparser模組的使用 # 聯絡: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()}") if __name__ == "__main__": aa = Conf() aa.read_sections()
結果為:
D:Python37python.exe F:/python_study/conf.py
1、獲取所有的sections:['mysqldb', 'mailinfo']
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")
結果為:
D:Python37python.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']
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")
結果為:
D:Python37python.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
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")
結果為:
D:Python37python.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')]
如果option不存在則建立它;
def set_option(self, m, n, s): self.conf.set(m, n, s) self.conf.write(open(self.f, "w")) print(f"7、設定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", "遊客")
結果為:
D:Python37python.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、設定setion:mysqldb下的option:sql_name的值為:遊客
因為之前的組態檔中沒有sql_name
,所以會新建立它,如果建立的內容存在,直接修改對應的值;
has_section
方法檢查對應的section
是否存在;has_option
方法檢查對應的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")
結果為:
D:Python37python.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、設定setion:mysqldb下的option:sql_name的值為:遊客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
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}已經存在,無需新增!") 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},已經存在,無需新增!") 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:Python37python.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、設定setion:mysqldb下的option:sql_name的值為:遊客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
10、新增新的section為login
11、要新增的option為name, 值為root
再次執行程式碼,會提示已經存在:
10、新增新的section為login已經存在,無需新增!
11、要新增的option為name, 值為root,已經存在,無需新增!
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")
結果為:
D:Python37python.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、設定setion:mysqldb下的option:sql_name的值為:遊客
8、檢查section:mysqldb是否存在:True
9、檢查section:mysqldb下的option:sql_name是否存在:True
10、新增新的section為login已經存在,無需新增!
11、要新增的option為name, 值為root,已經存在,無需新增!
12、刪除section:login==OK!
13、要刪除的section:login下的option:name不存在,不用刪除!
異常 | 描述 |
---|---|
ConfigParser.Error | 所有異常的基礎類別 |
ConfigParser.NoSectionError | 指定的section沒有找到 |
ConfigParser.DuplicateSectionError | 呼叫add_section() 時,section名稱已經被使用 |
ConfigParser.NoOptionError | 指定的引數沒有找到 |
ConfigParser.InterpolationError | 當執行字串插值時出現問題時,出現異常的基礎類別 |
ConfigParser.InterpolationDepthError | 當字串插值無法完成時,因為迭代次數超過了最大的範圍,所以無法完成。InterpolationError的子類 |
InterpolationMissingOptionError | 當參照的選項不存在時,會出現異常。InterpolationError的子類 |
ConfigParser.InterpolationSyntaxError | 當產生替換的源文字不符合所需的語法時,就會出現異常。InterpolationError的子類。 |
ConfigParser.MissingSectionHeaderError | 當試圖解析一個沒有分段標題的檔案時,會出現異常。 |
ConfigParser.ParsingError | 當試圖解析檔案時發生錯誤時,會出現異常 |
ConfigParser.MAX_INTERPOLATION_DEPTH | 當raw引數為false時,get()的遞迴插值的最大深度。這隻適用於ConfigParser類 |
# -*- coding:utf-8 -*- # 作者:NoamaNelson # 日期:2021/11/19 # 檔名稱:conf.py # 作用:configparser模組的使用 # 聯絡: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、設定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}已經存在,無需新增!") 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},已經存在,無需新增!") 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")
到此這篇關於Python學習之configparser模組的使用詳解的文章就介紹到這了,更多相關Python configparser模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45