Python大佬告訴你:使用Python處理yaml格式的數據簡單到爆
- 2019 年 10 月 3 日
- 筆記
一、思考❓❔
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在自動化測試和測試開發中都有廣泛應用