现在越来越多的开源软件在配置文件中都使用了YAML格式,这种格式文件去除了引号以及各种括号,所以在Python中处理yaml文件就成为了常态,而且也可以当做参数集,在pytest中直接读取,然后使用,Python自带的包模块名称如下
from ruamel import yaml,这个就是用来处理
- 这个可以直接导入一个yaml文件,转换为json格式的Python对象,也可以把一个Python的元组或者字典,直接写入一个yaml文件中
比如写入的语法格式如下:
data={'name': '李四', 'age': 22, 'sex': '男', 'interest': {'兴趣1': '爬山', '兴趣2': '音乐'}, 'skill': [{'语言': 'Python', '时间': '2年'}], 'exam': [{'subject': '高级程序员', 'score': 50}]}’
with open(r'd:\10\10.2.yaml', mode='w', encoding="utf-8") as file: yaml.dump(data, file)#这个就是把一个dict写入到一个文件,而且写入成功后,Python会负责把文件10.2.yaml给关闭。这个是with open()顺带就完成的事情
2、文件的导入写法如下:
from ruamel.yaml import YAML yaml=YAML(typ='safe') with open(r'd:\10\10.1.yml',encoding="utf-8") as file: data=yaml.load(file) print(data)
Python的模块导入方式直接import和from的区别
- 使用import modlue直接导入时,会直接创建一个新的全局空间,使用模块内部的变量或者名称都是用modlue.name1的方式来引用,
- 使用from modlue import name1 则会可以在导入模块中直接使用name1,但是只能使用name1,其他name2或者更多的内容不能使用,同时常见的modlue可以是一个.py 文件,也可以是一个包目录,然后导入这个包目录下的具体模块,如下图:
from pkg.hook.pineapple import hook as model_hook_pineapple
from pkg.hook.mysql import hook as module_hook_mysql
具体的目录详情如下:
对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式
而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了。。。。。。这就是Python强大的名字空间概念
3、as 关键词的作用就是为为模块名起别名,为模块内的函数起别名,相当于m1=1;m2=m1
4、如果一个py文件中多次导入同一个模块,默认只导入一次,导入过一次后,此后遇到同一个模块的导入,都会跳过
5、同一个空间内如果出现重名的现象那么会有覆盖效果,比如第一个模块my_module中定义的monkey变量,然后在main.py 中导入from my_module import monkey
次数main.py中如果再定义了一个monkey,则在执行main.py时,模块中的monkey变量直接被覆盖,只用调用my_module内部的用到monkey的函数,才能访问到原始的值,在main.py中使用的一致都是新定义的变量
6、所有类内部定义的以__开头的变量都私有变量,已__开头的方法也是私有方法,不能用from 模块 import 类名.变量 的方式导入到其他文件中使用的,最低导入的界别为一个类、或者模块中单独定义的变量和方法,不能单独导入一个一个类中的变量和方法,