【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)

 

posted @ 2021-11-07 09:26  Phoenixy  阅读(201)  评论(0)    收藏  举报