一、思考
1.什么是yaml?
- 不是标记语言
- 对用户极其友好
- 数据序列化标准
- 跨语言
所有编程语言都支持 - 跨平台
所有平台都支持
Windows、linux、Mac - 格式简单
比json小姐姐穿得更少 - 应用非常广泛
2.Python中哪些模块可以处理yaml?
- yyaml
应用最广泛
封装的api不够简单
不支持YAML 1.2最新版 - ruamel.yaml
是pyyaml的衍生版
封装的api简单
支持YAML 1.2最新版
二、基础操作
1.安装ruamel.yaml
使用官方pypi源来安装
pip install ruamel.yaml
使用豆瓣pypi源来安装(推荐)
pip install -i https://pypi.douban.com/simple ruamel.yaml
2.基本用法
在项目根目录下创建user_info.yaml文件
外号
user:
- 可优
- keyou
- 小可可
- 小优优
爱人
lovers:
- 柠檬小姐姐
- 橘子小姐姐
将yaml格式的数据转化为python中的数据类型
from ruamel.yaml import YAML
# 第一步: 创建YAML对象
yaml = YAML(typ='safe')
# typ: 选择解析yaml的方式
# 'rt'/None -> RoundTripLoader/RoundTripDumper(默认)
# 'safe' -> SafeLoader/SafeDumper,
# 'unsafe' -> normal/unsafe Loader/Dumper
# 'base' -> baseloader
# 第二步: 读取yaml格式的文件
with open('user_info.yaml', encoding='utf-8') as file:
data = yaml.load(file) # 为列表类型
print(f"data:\n{data}")
输入结果:
将Python中的字典或者列表转化为yaml格式的数据
'''
from ruamel.yaml import YAML
# 第一步: 创建YAML对象
# yaml = YAML(typ='safe')
yaml = YAML()
# 第二步: 将Python中的字典类型数据转化为yaml格式的数据
src_data = {'user': {'name': '可优', 'age': 17, 'money': None, 'gender': True},
'lovers': ['柠檬小姐姐', '橘子小姐姐', '小可可']
}
with open('new_user_info.yaml', mode='w', encoding='utf-8') as file:
yaml.dump(src_data, file)
生成的new_user_info.yaml文件:
user:
name: 可优
age: 17
money:
gender: true
lovers:
- 柠檬小姐姐
- 橘子小姐姐
- 小可可
三、复杂案例演练
1.将Python中的对象转化为yaml格式数据
'''书!
'''
from ruamel.yaml import YAML
# 第一步: 创建需要保存的User类
class User:
"""
定义用户类
"""
def __init__(self, name, age, gender):
self.name, self.age, self.gender = name, age, gender
self.lovers = []
def loved(self, user):
self.lovers.append(user)
# 第二步: 创建YAML对象
yaml = YAML()
# 第三步: 注册用户类
yaml.register_class(User)
# 第四步: 保存用户对象
keyou = User("可优", 17, "油腻男")
lemon_little_girl = User("柠檬小姐姐", 16, "素颜小仙女")
orange_little_girl = User("橘子小姐姐", 18, "不会PS的靓妹")
keyou.loved(lemon_little_girl)
keyou.loved(orange_little_girl)
with open('lovers.yaml', mode='w', encoding='utf-8') as file:
yaml.dump([keyou], file)
生成的lovers.yaml文件:
- !User
name: 可优
age: 17
gender: 油腻男
lovers:
- !User
name: 柠檬小姐姐
age: 16
gender: 素颜小仙女
lovers: []
- !User
name: 橘子小姐姐
age: 18
gender: 不会PS的靓妹
lovers: []
四、总结
yaml文件读取效率非常高
yaml文件相当适合存放测试数据
ruamel.yaml模块对yaml文件的操作进一步简化
yaml在自动化测试和测试开发中都有广泛应用