烂笔头:知识回顾 -- 配置文件

一般配置文件种类:ini,conf,yaml

  • ini与conf
  • 注释使用;或者#

组成:


[section] 区域名
option = value 选项 = 选项值

读取:

1️⃣创建配置解析器对象
config = ConfigParser()
2️⃣指定读取的配置文件名
config.read('filename', encoding='utf-8')
3️⃣读取数据
config.sections()

获取配置文件的option
方法一:
config[section][option]
方法二:
config.get(section,option)

取值转换为python对应的类型:
getint()
getfloat()
getboolean() -->
对应转换关系:

**配置文件中存在一个默认为DEFAULT的section区域,该区域中的option为所有section中公共的数据(类似全局变量),若不显式定义DEFAULT,则默认为一个空字典**

写入

1️⃣创建配置解析器对象
config = ConfigParser()
2️⃣将需要写入的配置文件构造成嵌套字典的字典(section为key,option及value为key,value)

for key in dict_dict:
    config[key] = dict_dict[key]
with open('filename', 'w') as f:
    config.write(f)

封装

  • 类名() --> 自动调用init()方法,创建一个实例化对象
  • 对象() --> 自动调用call()方法,
class HandleConfig(ConfigParser):
    def __init__(self, filename=File_path.Config_File_Path):
        # 继承父类,同时重写父类self.filename属性,对父类init方法的拓展
        super().__init__()
        self.filename = filename
        self.read(self.filename, encoding="utf-8")
    
        def __call__(self, section="DEFAULT", option=None, is_eval=False, is_bool=False):
        """
        '对象()'这种形式,__call__方法会被调用
        :param section: 区域名
        :param option: 选项名
        :param is_eval: 为默认参数,是否进行eval函数转换,默认不转换
        :param is_bool: 选项所对应的值是否需要转化为bool类型,默认不转换
        :return:
        """
        
        if option is None:
         # 返回DEFAULT默认区域下的所有选项,构造成的一个字典
            return dict(self[section])

        if isinstance(is_bool, bool):
            if is_bool:
                # 将获取到的数据使用getboolean()方法来获取
                return self.getboolean(section, option)
        else:
            raise ValueError("is_bool必须是布尔类型")  # 手动抛异常

        data = self.get(section, option)
        # 如果获取到的数据为数字类型的字符型,自动转化为Python中数字类型
        if data.isdigit():  # 判断是否为数字类型的字符串
            return int(data)
        try:
            return float(data)  # 如果为浮点类型的字符串,则直接转换
        except ValueError:
            pass

        if isinstance(is_eval, bool):
            if is_eval:
                # 将获取到的数据使用eval函数进行转换
                return eval(data)
        else:
            raise ValueError("is_eval")  # 手动抛异常
        return data

yaml相关

存储字典使用[key: value]的形式,(冒号后面需空一格)存储列表使用[- 元素]的形式,存储书写注意缩进

yaml文件写入一组数据直接使用dump方法,写入多组数据使用dumpall方法,注意写入数据带中文,需要指定参数allowunicode=True

with open('filename.yaml', mode='w', encoding='utf-8') as f:
    yaml.dump(data=test_data, stream=f, allow_unicode=True)
    

读取数据时需要使用load_all方法,而且此方法返回一个生成器,需要使用for循环迭代读取每一组数据

with open('filename.yaml', mode='r', encoding='utf-8') as file:
    t = yaml.load_all(file, Loader=yaml.FullLoader)
    for data in t:
        print(t)

yaml参考资料:

  • https://sutune.me/2018/05/08/appium-yaml/
  • https://www.cnblogs.com/linuxchao/p/linuxchao-yaml.html#4335168
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值