configparser处理配置文件

2020-09-11  本文已影响0人  阿登20

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")
上一篇下一篇

猜你喜欢

热点阅读