前言
使用配置文件來靈活的配置一些參數是一件很常見的事情,配置文件的解析並不復雜,在python里更是如此,在官方發布的庫中就包含有做這件事情的庫,那就是configParser
configParser解析的配置文件的格式比較象ini的配置文件格式,就是文件中由多個section構成,每個section下又有多個配置項
ini
1.ini配置文件格式如下:
;這里是注釋
[section0]
key0 = value0
key1 = value1
[section1]
key2 = value2
key3 = value3
2.section不能重復,里面數據通過section去查找,每個seletion下可以有多個key和vlaue的鍵值對,注釋用英文分號(😉
configparser
1.python3里面自帶configparser模塊來讀取ini文件
# python3
import configParser
注意:python2的版本是Configparser
# python2
import ConfigParser
2.在pycharm里面,新建一個ini文件:右鍵New->File, 輸入框直接寫一個.ini后綴文件就行了,然后寫數據
3.注釋里面有中文的話,這里代碼跟python2是有點區別的,python2里面直接conf.read(cfgpath)就可以了,python3需要加個參數:encoding="utf-8"
注意:如果ini文件里面寫的是數字,讀出來默認是字符串
# coding:utf-8
# 作者:上海-悠悠
# QQ群:588402570
import configparser
import os
curpath = os.path.dirname(os.path.realpath(__file__))
cfgpath = os.path.join(curpath, "cfg.ini")
print(cfgpath) # cfg.ini的路徑
# 創建管理對象
conf = configparser.ConfigParser()
# 讀ini文件
conf.read(cfgpath, encoding="utf-8") # python3
# conf.read(cfgpath) # python2
# 獲取所有的section
sections = conf.sections()
print(sections) # 返回list
items = conf.items('email_163')
print(items) # list里面對象是元祖
運行結果:
D:\debug_p3\cfg\cfg.ini
['email_qq', 'email_163']
[('sender', 'yoyo@163.com'),
('psw', '123456'),
('port', '465'),
('smtp_server', 'smtp.163.com'),
('receiver', 'xxx@qq.com')]
remove
1.如果想刪除section中的一項,比如我想刪除[email_163]下的port 這一行
# 刪除一個 section中的一個 item(以鍵值KEY為標識)
conf.remove_option('email_163', "port")
2.刪除整個section這一項
conf.remove_section('email_163')
3.參考代碼:
# coding:utf-8
import configparser
import os
# 作者:上海-悠悠
# QQ群:588402570
curpath = os.path.dirname(os.path.realpath(__file__))
cfgpath = os.path.join(curpath, "cfg.ini")
print(cfgpath) # cfg.ini的路徑
# 創建管理對象
conf = configparser.ConfigParser()
# 刪除一個 section中的一個 item(以鍵值KEY為標識)
conf.remove_option('email_163', "port")
items = conf.items('email_163')
print(items) # list里面對象是元祖
# 刪除一個 section
conf.remove_section('email_163')
sects = conf.sections()
print(sects) # list里面對象是元祖
運行結果:
D:\debug_p3\cfg\cfg.ini
[('sender', 'yoyo@163.com'), ('psw', '123456'), ('smtp_serve r', 'smtp.163.com'), ('receiver', 'xxx@qq.com')]
['email_qq']
add
1.新增一個section
# 添加一個select
conf.add_section("emali_tel")
print(conf.sections())
2.section里面新增key和value
# 往select添加key和value
conf.set("emali_tel", "sender", "yoyo1@tel.com")
conf.set("emali_tel", "port", "265")
write寫入
1.write寫入有兩種方式,一種是刪除原文件內容,重新寫入:w
conf.write(open(cfgpath, "w")) # 刪除原文件重新寫入
另外一種是在原文件基礎上繼續寫入內容,追加模式寫入:a
conf.write(open(cfgpath, "a")) # 追加模式寫入
2.前面講的remove和set方法並沒有真正的修改ini文件內容,只有當執行conf.write()方法的時候,才會修改ini文件內容,舉個例子:在ini文件上追加寫入一項section內容
# coding:utf-8
import configparser
import os
curpath = os.path.dirname(os.path.realpath(__file__))
cfgpath = os.path.join(curpath, "cfg.ini")
print(cfgpath) # cfg.ini的路徑
# 創建管理對象
conf = configparser.ConfigParser()
# 添加一個select
conf.add_section("emali_tel")
print(conf.sections())
# 往select添加key和value
conf.set("emali_tel", "sender", "yoyo1@tel.com")
conf.set("emali_tel", "port", "265")
items = conf.items('emali_tel')
print(items) # list里面對象是元祖
conf.write(open(cfgpath, "a")) # 追加模式寫入
運行后會發現ini文件最后新增了寫入的內容了
set修改ini文件
1.比如我想把前面ini文件里面的[email_163]下的port改成"中文"
注意:這里寫入中文的話,需要加上寫入的編碼格式:encoding="utf-8"
# coding:utf-8
import configparser
import os
# 作者:上海-悠悠
# QQ群:588402570
curpath = os.path.dirname(os.path.realpath(__file__))
cfgpath = os.path.join(curpath, "cfg.ini")
# 創建管理對象
conf = configparser.ConfigParser()
# 先讀出來
conf.read(cfgpath, encoding="utf-8")
# 修改section里面的值
conf.set("email_163", "port", "中文") # 寫入中文
conf.write(open(cfgpath, "r+", encoding="utf-8")) # r+模式
python自動化交流 QQ群:779429633