[Python]python+yaml三行代码完成配置文件灵活读取与warning:YAMLLoadWarning处理

前言—废话

在开发一些小工具的时候,偶尔会频繁的修改某一个常量或者变量的值,如果每次都去打开自己都不想看到的代码,那心情得是多么的糟糕;不过也无妨,我们可以不打开代码同时让其使用最新的变量数据,最大的功劳就来自有配置文件;我们可以自由的修改配置文件中的内容,如果你在本地修改一个txt文本文档,借助配置文件,我们可以将所有可能会变化的参数存放在这里,需要修改的时候,直接针对配置文件做修改即可;

废话说了这么多我们一步一步来实现刚才吹过的牛;

开始干

一共就简单的使用了两个文件,先讲下等会要用的文件布局:

--- conf.yaml
  |
  |-conf_demo.py

配置文件

首先,准备一个配置文件,我们这里采用yaml文件,他有很多优势,想了解更多的可以自己去其他地方查查;
conf.yaml
文件内容:

common:
  name: lily
  age: 18
  mobile: 18888888888

flag:
  test: True

sign: wusuowei

这里我们临时创造几组数据,供稍后使用;

代码撸起来

最简单最粗暴,不卷的方式实现yaml文件读取,看代码:

import yaml

def read_yaml_1(file):
    with open(file, encoding='utf-8') as f:
        data = yaml.load(f)
        return data
if __name__ == '__main__':
    file = 'conf.yaml'
    text = read_yaml_1(file)
    print(text)

运行查看结果

{'common': {'name': 'lily', 'age': 18, 'mobile': 18888888888}, 'flag': {'test': True}, 'sign': 'wusuowei'}

通过上面的结果,已经可以清晰的看到成功读取到配置文件的数据了,需要哪些数据,再通过字典的方式直接拿值,就ok了;
如果看了上面的你还没什么感觉,那我就再拼凑几个字,通过2个demo,帮你加深理解下;

demo1 获取单层字段数据

conf.yaml中单层字段就是我们用箭头标注出来的sign字段,现在我们就来获取它

在这里插入图片描述
代码实现:

import yaml

def read_yaml_1(file):
    with open(file, encoding='utf-8') as f:
        data = yaml.load(f)
        return data
if __name__ == '__main__':
    file = 'conf.yaml'
    text = read_yaml_1(file)
    print(text['sign'])
    print(text.get('sign',0))
    print(text.get('sign2',0))

结果:
在这里插入图片描述

延伸
在获取字段的时候,我们这里展现了两种方式:
1.text['sign'] : 可以简单的通过字典形式的根据key拿取value;
2.text.get('sign',0) : 也可以用get获取,第一个参数就是key,第二个参数算是辅助功能,实现的功能就是如果这个key不存在的时候会抛异常,而是将value的值赋为0;使用这种方法就不会抛出异常;

demo2 获取嵌套字段数据

import yaml

def read_yaml_1(file):
    with open(file, encoding='utf-8') as f:
        data = yaml.load(f)
        return data

if __name__ == '__main__':
    file = 'conf.yaml'
    text = read_yaml_1(file)
    print(text['common'])
    print(text['common']['name'])
    print(text['common']['age'])

结果:
在这里插入图片描述

稍微打理漂亮点

刚才的代码基本上实现了我们想要的共,接下做点对镜贴花黄的事情,稍微打理修饰一下,让代码更美,让写代码的小哥哥小姐姐更靓;

我们在这里加了一些简单的判断,采用的try...Exception...,让代码处理异常能力得到进一步的提升,看代码:

import yaml

def read_yaml(file):
    try:
        with open(file, encoding='utf-8') as f:
            data = yaml.load(f)
        return {'status':'pass','data':data}
    except Exception as e:
        return {'status':'fail','data':e.args[1]}

if __name__ == '__main__':
    file = 'conf.yaml'
    text = read_yaml(file)
    print(text['data'])
    print(text['data']['common']['name'])
    print(text['data']['common']['age'])

结果:

{'common': {'name': 'lily', 'age': 18, 'mobile': 18888888888}, 'flag': {'test': True}, 'sign': 'wusuowei'}
lily
18

在这里插入图片描述

补充:
如果你的yaml版本比较老的话,可能会报一个warning的提示,在加载yaml文件的时候添加一个参数Loader=yaml.FullLoader即可
warning:

YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  data = yaml.load(f)

修改后的主要代码:

        with open(file, encoding='utf-8') as f:
            data = yaml.load(f, Loader=yaml.FullLoader)

完活,结束~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都吴所谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值