Python自动化 村长告诉你:Python 处理 yaml 格式的数据简单到爆

kouyou · 2019年08月23日 · 最后由 zzh_1991 回复于 2020年04月13日 · 962 次阅读

一、思考❓❔

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在自动化测试和测试开发中都有广泛应用

共收到 31 条回复
1楼 已删除
2楼 已删除
3楼 已删除
4楼 已删除
5楼 已删除
6楼 已删除
7楼 已删除

干货满满,收益匪浅!2019-08-25 22:14:45

干货满满,收益匪浅!2019-08-25 22:31:37

干货满满,收益匪浅!2019-08-25 22:49:15

干货满满,收益匪浅!2019-08-25 22:51:06

干货满满,收益匪浅!2019-08-25 22:54:42

干货满满,收益匪浅!2019-08-25 23:03:44

大王叫我来巡山!!我到这儿转一转!!!

大王叫我来巡山!!!我到这儿转一转!!!

点赞可优大佬!666

赞,通俗易懂,已收藏

keyou大佬威武霸气!

受益匪浅

20190902164234:可优大佬的课讲的既生动又好听

666写得真棒!赞赞赞!!!

20190920235652:每一发奋努力的背后,必有加倍的赏赐。

20190921122848:可优大佬,你走了,没人督促拔草了,田里长满了草

20190921174430:最喜欢上可优大佬的课

可优老师是集颜值与才华于一身的大佬

可优大佬在课间休息时间最爱播放的歌曲是:Adele唱的,我也爱听

可优大佬讲课诙谐幽默,易于理解

干货!!真棒。

喜欢可优老师讲课,喜欢看可优老师的帖子。

666文章浅显易懂,手动点赞

满满干货,好好学习!!!

满满干货,好好学习,天天向上!!!

手动点赞!!

手动给可优老师点赞!

这是自动化执行发布的评论!2020_04_12_15_35_12

这是自动化执行发布的评论!2020_04_12_15_37_43

这是自动化执行发布的评论!2020_04_12_15_39_35

可优大佬讲的东西很有价值!点个赞!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册