【Python】configParser 模块 _ 对.ini 配置文件的读写改
获取配置文件
# 获取配置文件 import configParser config = configparser.ConfigParser()
读取配置文件
# 判断配置文件位置 config.read(pathname, encoding="utf-8")
运行报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc5 in position 2: invalid continuation byte 解决:查看.ini 配置文件编码格式,修改为utf-8
读取配置文件并入参
input_name = "张三" eval(config.get("code","test3")) # 获取配置文件的结果为str 需要转换为dict
config.ini 配置文件内容
config.ini内容 [code] test1 = 123456 test2 = 123789
test3 = {"name":input_name,"password":"pa123456"}
对配置文件进行修改/写入
self.config.set(section, option, value) with open('config.ini', 'w', encoding="") as confini: self.config.write(confini)
对配置文件操作的完整代码
class Config(): """配置文件相关类""" def __init__(self): """构建函数""" # 获取配置文件 self.config = configparser.ConfigParser(comment_prefixes='/', allow_no_value=True) # 配置文件存储位置/根目录 if os.path.exists("config.ini"): # 文件存在 self.inipath = os.path.abspath("..") + "/config.ini" self.config.read(self.inipath, encoding="utf-8") elif "config.ini" in os.listdir(os.path.abspath("..")): self.inipath = os.path.abspath("..") + "/config.ini" self.config.read(self.inipath, encoding="utf-8") elif "config.ini" in os.listdir(os.path.abspath("../..")): # 文件夹存在 self.inipath = os.path.abspath("../..") + "/config.ini" self.config.read(self.inipath, encoding="utf-8") else: print("当前路径不存在文件夹base或文件config.ini,当前路径:", os.getcwd()) def getConfig(self): """获取配置文件""" return self.config def setConfig(self, section, option, value): """改写配置文件""" # 获取配置文件 self.config.set(section, option, value) with open(self.inipath, 'w+', encoding="utf-8") as confini: self.config.write(confini) # 获取配置文件 config = Config().getConfig()
拓展
问题:当ini文件中存在注释时,对ini文件进行修改/写入时,清除注释信息
解决方法:
参考地址:https://www.codenong.com/21476554/
要保留注释,您必须欺骗configparser使其认为这不是注释,该行是没有值的键;
allow_no_value = True来初始化configparser对象。
保留默认的"#"和";"文件中的注释行,使用comment_prefixes ='/'
# 实例化对象时,添加参数 config = configparser.ConfigParser(comment_prefixes='/', allow_no_value=True)
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------
浙公网安备 33010602011771号