class MyConfig(configparser3.ConfigParser):
def __init__(self, file_name):
# 實例化對象
super().__init__()
self.cfg_file = os.path.join(CONF_PATH, file_name)
self.read(self.cfg_file, encoding="utf8")
def modify_specilize_section_option_content(self, section_name, option_name, content):
""" 向指定配置文件中的指定section_option寫入指定內容
:param section_name: setion名稱
:param option_name: option名稱
:param content: 寫入內容,必須是str型
:return: None
"""
# section存在判斷
if self.has_section(section_name): # 是否存在該section
self.set(section_name, option_name, content)
# 不存在section
else:
# 添加section
self.add_section(section=section_name)
self.set(section=section_name, option=option_name, value=content) # 給section項中寫入鍵值對
with open(self.cfg_file, mode="w+") as f:
self.write(f)
代碼內容如上,配置文件內容如下:
我們執行如下代碼:
if __name__ == "__main__":
my_config = MyConfig('stuinfo.ini')
my_config.modify_specilize_section_option_content('Name', 'Zhangsan', '張三三')
會運行成功,這時候我們去查看配置文件內容,會發現:
1. 配置文件出現亂碼
2. 我們再次讀取配置文件內容時,就會報下方編碼錯誤:
那麼原因是什麼呢?
原因在於我們對配置文件進行修改後進行保存時,編碼格式選擇的是None,
所以,寫入後保存,再次打開配置文件就亂碼了
並且,我們讀取配置文件時,編碼選擇的時utf8,配置文件亂碼後,使用utf8編碼方式報錯就出現異常了
上方原因已經指明。那麼久很好修改了,修改
modify_specilize_section_option_content函數中with open()一行,參數增加一項,encoding="utf8",就可以解決問題了
這時,要是進行修改配置文件,配置文件就不會亂碼了,讀取配置文件就不會報編碼問題了