美文网首页
configparser处理配置文件

configparser处理配置文件

作者: 阿登20 | 来源:发表于2020-09-11 07:45 被阅读0次

    configparser

    配置文件:以.conf .ini .cfg结尾的格式

    a.cfg 配置文件的内容

    # 注释1
    ; 注释2
    
    [section1]
    k1 = v1
    k2:v2
    user=adeng
    age=18
    is_admin=true
    salary=31.5
    [section2]
    k1 = v1
    

    读取配置文件

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    ===========================
    # @Time : 2020/9/9 19:50
    # @File  : 读配置文件.py
    # @Author: adeng
    # @Date  : 2020/9/9
    ============================
    """
    
    import configparser
    
    config=configparser.ConfigParser()
    config.read('a.cfg',encoding="utf-8")
    
    #查看所有的标题
    res=config.sections() #['section1', 'section2']
    print(res)
    
    #查看标题section1下所有key=value的key
    options=config.options('section1')
    print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']
    
    #查看标题section1下所有key=value的(key,value)格式
    item_list=config.items('section1')
    print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]
    
    #查看标题section1下user的值=>字符串格式
    val=config.get('section1','user')
    # val=config["section1"]["user"] # adeng
    
    print(val) #adeng
    
    #查看标题section1下age的值=>整数格式
    val1=config.getint('section1','age')
    print(val1) #18
    
    #查看标题section1下is_admin的值=>布尔值格式
    val2=config.getboolean('section1','is_admin')
    print(val2) #True
    
    #查看标题section1下salary的值=>浮点型格式
    val3=config.getfloat('section1','salary')
    print(val3) #31.5
    

    config.read(文件)报错

    pycharm-settings--editor-file Encoding-如下图设置

    image.png

    配置文件: 增 删 改 查

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    ===========================
    # @Time : 2020/9/9 20:21
    # @File  : 改写配置文件.py
    # @Author: adeng
    # @Date  : 2020/9/9
    ============================
    """
    
    import configparser
    from scripts import handle_file
    # 处理文件乱码的情况
    handle_file.HanldeFile.change_to_utf8(r"a.cfg")
    # 实例化一个ConfigParser 对象,这两步都是固定的。封装时可以放在__init__
    config=configparser.ConfigParser()
    config.read('a.cfg',encoding='utf-8')
    
    #-------------------增--------------------
    # 增操作,一般用在把数据写入配置文件,必须掌握后面封装的时候有用
    # 以key1:{key2:value} 添加
    config["adeng"] = {"name":"阿登","age":"18"} # 这种添加,adeng存在不会报错
    config["adeng"]= {"name":"阿登"}
    config["adeng"]= {"name":"1"}  # name存在,就是修改阿登=1
    # 修改
    config["adeng"]["age"]= "3" # 这种修改,必须adeng区域名必须存在
    config.write(open('a.cfg','w',encoding="utf8"))
    #添加一个标题
    config.add_section('egon') # egon存在会报错
    #-------------------------查----------------------
    # 查
    # 1.查看配置文件 所有标题,返回list
    res =config.sections()
    print(res)
    # 2. 查找区域名下面的key,返回list
    res = config.options("section1")
    print(res)
    
    # 3. #查看区域名下所有key=value的(key,value)格式
    res = config.items("section1")
    print(res)
    # 4. 获取选项名的值
    print(config.get("section1","user"))
    # 5.config["区域名"]["选项名"]
    print(config["section1"]["age"])
    
    #----------------改------------------------
    # 改
    #在标题egon下添加name=egon,age=18的配置
    config.set('egon','name','egon') # 区域名egon 必须存在
    config.set('egon','age',"17")
    # config.set('egon','age',18) #报错,必须是字符串
    config["egon"]["age"]= "16" # 16 必须是str
    
    # ------------------------删---------
    
    #删除整个标题section2
    config.remove_section('section2')
    
    # #删除标题section1下的某个k1和k2
    config.remove_option('section1','k1')
    config.remove_option('section1','k2')
    
    #判断是否存在某个标题
    print(config.has_section('section1'))
    
    # 判断标题section1下是否有user
    print(config.has_option('section1',''))
    
    #最后将修改的内容写入文件,完成最终的修改
    config.write(open('a.cfg','w',encoding="utf8"))
    
    

    配置文件 封装


    rom configparser import ConfigParser
    
    
    class HandleConfig:
        """
        这是一个处理配置文件的类 HandleConfig
        """
    
        # 构造一个__init__函数
        def __init__(self, filename):
            self.filename = filename
            # 实例化1个ConfigParser的对象当做实例变量
            self.config = ConfigParser()
            # 读数据前必须指定的读取配置文件,并当作一个实例变量
            self.config.read(self.filename, encoding="utf8")
    
        # 获取数据是字符串类型 需要传 区域名 选项名
        def get_value(self, section, option):
            return self.config.get(section, option)
    
        # 获取int数据
        def get_int(self, section, option):
            return self.config.getint(section, option)
    
        # 获取float数据
        def get_float(self, section, option):
            return self.config.getfloat(section, option)
    
        # 获取boolean数据
        def get_boolean(self, section, option):
            return self.config.getboolean(section, option)
    
        # 获取 列表数据 元组 字典数据等等
        def get_eval_data(self, section, option):
            return eval(self.config.get(section, option))
            # return eval(self.get_value(section, option))
    
    
        # 写入方法的封装
        # 需要构造的写入的数据  写入的文件名filename,最好不要在有数据的文件写入
    
        @staticmethod
        def write_config(datas, filename):
            if isinstance(datas, dict):
                for value in datas.values():
                    if not isinstance(value, dict):
                        raise TypeError(f"{value}不是一个【字典】")
                    else:
                        config = ConfigParser()
                        for key in datas:
                            config[key] = datas[key]
                        with open(filename, "w", encoding="utf8") as file:
                            config.write(file)
    
    
    # do_config = HandleConfig("testcase.conf")
    
    
    if __name__ == '__main__':
        do_config = HandleConfig("testcase.conf")
        do_config.get_value("file path", "cases_path")
        do_config.get_value("file path", "log_path")
        do_config.get_int("column", "column1")
        do_config.get_eval_data("msg", "value11")
        datas = {
            "file path": {
                "cases_path": "cases.xlsx",
                "log_path": "record_run_result.txt"
    
            },
            "msg": {
                "success_result": "Pass",
                "fail_result": "Fail"
    
            },
            "column": {
                "column1": 6,
                "column": 7,
            }
        }  # 嵌套字典的字典
        HandleConfig.write_config(datas, "write_config.ini")
    

    相关文章

      网友评论

          本文标题:configparser处理配置文件

          本文链接:https://www.haomeiwen.com/subject/cuyyektx.html