Python大佬告訴你:使用Python處理yaml格式的數據簡單到爆


一、思考❓❔

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM