一, 思考
1. 什么是 YAML?
不是标记语言
对用户极其友好
数据序列化标准
跨语言
所有编程语言都支持
跨平台
所有平台都支持
Windows,Linux,Mac
格式简单
比 JSON 小姐姐穿得更少
应用非常广泛
2.Python 中哪些模块可以处理 YAML?
pyyaml
应用最广泛
封装的 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 在自动化测试和测试开发中都有广泛应用
来源: https://www.cnblogs.com/keyou1/p/11510975.html