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