目录
1.数据类型
1.写入格式
1. 对象(字典):键:(空格)值
2. 数组(列表):它是使用一组横线"-"开头
2. 嵌套形式
1. 列表中的字典
2. 字典中的字典
3. 字典中的列表
4. 同时有列表和字典
3. 数据类型强转
2. yaml内部数据的引用
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)}
方法一:
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'}}
-
data1: ces1
data2: ces2
-
data3: ces3
打印结果:
[{'data1': 'ces1', 'data2': 'ces2'}, {'data3': 'ces3'}]
data1:
data2: ces
打印结果:
{'data1': {'data2': 'ces'}}
data:
- data1: 1
- data2: 2
打印结果:
{'data': [{'data1': 1}, {'data2': 2}]}
-
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'}
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'}
&建立锚点(标记),*使用锚点,<<表示合并到当前数据
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}}