一、思考❓❔
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在自動化測試和測試開發中都有廣泛應用