前言—废话
在开发一些小工具的时候,偶尔会频繁的修改某一个常量或者变量的值,如果每次都去打开自己都不想看到的代码,那心情得是多么的糟糕;不过也无妨,我们可以不打开代码同时让其使用最新的变量数据,最大的功劳就来自有配置文件;我们可以自由的修改配置文件中的内容,如果你在本地修改一个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)
完活,结束~~~