从0开始python学习-36.pytest中yaml的基本数据结构及锚点引用

目录

1.数据类型

1.写入格式

1. 对象(字典):键:(空格)值

2. 数组(列表):它是使用一组横线"-"开头

2. 嵌套形式

1. 列表中的字典

2. 字典中的字典

3. 字典中的列表

4. 同时有列表和字典

3. 数据类型强转

2. yaml内部数据的引用


1.数据类型

1.写入格式

1. 对象(字典):键:(空格)值

data1: 12 
data2: 8.9
data3: 测试字符串1
data4: '测试字符串2'
data5: "测试字符串3"
data6: True
data7: null
data8: None
data9: 2024-1-2 12:12:00:50

1.1 字符串三种格式都可以,但是如果有特殊字符【\】时使用双引号的方式不会被转义,其它的都会加一个转义符\

1.2 在yaml中如果需要输入None,则应该写为null,如果写的时None会被认为是字符串None

1.3 时间格式写入正常按照格式写就行,但是输出打印的时候会使用datetime的方式

1.4 注意yaml的键不能重复,【:】后面有个空格才写值

打印结果:

{'data1': 12, 'data2': 8.9, 'data3': '测试字符串1\\n', 'data4': '测试字符串2\\n', 'data5': '测试字符串3\n', 'data6': True, 'data7': None, 'data8': 'None', 'data9': datetime.datetime(2024, 1, 2, 12, 12, 50)}

2. 数组(列表):它是使用一组横线"-"开头

方法一:

test:
  - data1: 10
    data2: 测试
  - data2: True

  方法二:

test1:
  data1: ces1
  data2: ces2
test2:
  data3: ces3

2.1 在不同层级下键可以重名

2.2 相同层级下不写-继续写键值对则最后组装成一个字典

打印结果:

# 方法一:
{'test': [{'data1': 10, 'data2': '测试'}, {'data2': True}]}
# 方法二:
{'test1': {'data1': 'ces1', 'data2': 'ces2'}, 'test2': {'data3': 'ces3'}}

2. 嵌套形式

1. 列表中的字典

-
  data1: ces1
  data2: ces2
-
  data3: ces3

打印结果:

[{'data1': 'ces1', 'data2': 'ces2'}, {'data3': 'ces3'}]

2. 字典中的字典

data1:
  data2: ces

 打印结果:

{'data1': {'data2': 'ces'}}

3. 字典中的列表

data:
  - data1: 1
  - data2: 2

打印结果:

{'data': [{'data1': 1}, {'data2': 2}]}

4. 同时有列表和字典

-
  data1: 1
  data2: 2
---
data1: ces1
data2: ces2

4.1 当一个yaml文件内有多组数据时,用三个-分隔, 读取时使用yaml.load_all进行读取

4.2 yaml.load_all读取出来是generator格式,需要进行格式转换,可以使用list进行强转后再使用

with open(yaml_path,encoding="utf-8") as f:
    value = yaml.load_all(f,Loader=yaml.FullLoader)
    data = list(value)
    for i in data:
        print(i)

打印结果:

[{'data1': 1, 'data2': 2}]
{'data1': 'ces1', 'data2': 'ces2'}

3. 数据类型强转

data1: !!int 10
data2: !!int "11"
data3: !!int '12'
data4: !!str 12
data5: !!str 12.5
data6: !!set {a,b,c}

注意:强转前后的数据类型必须要能正常转的,比如不能把布尔型转成整型

打印结果:

{'data1': 10, 'data2': 11, 'data3': 12, 'data4': '12', 'data5': '12.5', 'data6': {'b', 'c', 'a'}

2. yaml内部数据的引用

&建立锚点(标记),*使用锚点,<<表示合并到当前数据

data: &ces  # 在列表上标记锚点
  - data1: ces1
  - data2: ces2

data1:
  - data1: &data1 ces3 # 在列表中的值上分别标记锚点
  - data2: &data2 ces3

data2: *ces # 直接使用锚点

data3:
  - ces1: *data1
  - t: 111
  - ces2: *data2

data4:
  <<: *ces
  t: 123

打印结果:

{'data': [{'data1': 'ces1'}, {'data2': 'ces2'}], 'data1': [{'data1': 'ces3'}, {'data2': 'ces3'}], 'data2': [{'data1': 'ces1'}, {'data2': 'ces2'}], 'data3': [{'ces1': 'ces3'}, {'t': 111}, {'ces2': 'ces3'}], 'data4': {'data2': 'ces2', 'data1': 'ces1', 't': 123}}

 

 

 

 

 

 

 

 

 

 

 

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值