4 | YAML字符流、节点属性、块伸缩标头使用
- 1 字符流
- 1.1 表示方式
- 1.2 字符流解析
- 2 节点属性
- 3 块伸缩标头
1 字符流
1.1 表示方式
YAML
字符流是将多个文档放在同一个文件中,通过“—”
分隔符进行分割;- 示例:
---
user1:name: xiaomingage: 23password: 123456
---
user2:name: xiaozhangage: 24password: 123456
---
user3:name: xiaoliage: 25password: 123456
- 以上包含了三个文档,每个文档都以
“—”
分隔符作为开始标志; - 需要逐个读取每个文档,然后将它们解析为相应的
YAML
对象。
1.2 字符流解析
- 使用
PyYAML
库读取YAML
字符流; - 通过
load_all
函数,将字符流中的每个文档解析为YAML
对象; - 由于一个文档可能包括多个对象,因此需要使用循环逐个读取每个文档,然后解析其中的对象。
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28
# 文件名称:yaml_read01.py
# 作用:字符流解析
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport yaml# 读取YAML字符流
stream = open('config_zifuliu.yaml', 'r')
docs = yaml.load_all(stream, Loader=yaml.FullLoader)# 解析多个文档
for doc in docs:print(doc)# 关闭文件流
stream.close()
- 输出为:
{'user1': {'name': 'xiaoming', 'age': 23, 'password': 123456}}
{'user2': {'name': 'xiaozhang', 'age': 24, 'password': 123456}}
{'user3': {'name': 'xiaoli', 'age': 25, 'password': 123456}}
2 节点属性
- 每个节点都有一组属性,这些属性可以添加在节点名称后,用花括号表示;
- 属性名和属性值用冒号隔开,多个属性之间用逗号隔开;
- 属性值可以是任意类型的标量值,也可以是映射对象和列表对象;
带 ID 的节点
# 带 ID 的节点
- id: 1name: xiaoliage: 33- id: 2name: xiaowangage: 44
对象属性的定义
# 定义一个 student 对象
- person:id: 1name: xiaozhagnage: 45
列表属性的定义
# 定义一个列表
- person:- xiaozhang- xiaoli- xiaowang
属性的嵌套
# 定义一个嵌套的对象- person:id: 123name: xiaowangage: 99grades:math: 100science: 100history: 100
3 块伸缩标头
- 块是一种结构,为结构化数据提供缩进关系的文本块;
- 块之间的关系可以使用细节和更高的缩放级别进行解释和表述;
- 块伸缩标头就是定义块扩展和缩放的一种方法,可以使
YAML
代码的可读性和可维护性更高。
# 块缩进级别为 0
name: John
age: 25
address:street: 123 Main Stcity: Anytownstate: CAzip: 12345# 使用 '+' 扩大缩进级别
- name: Janeage: 30address:+street: 123 Main St+city: Anytown+state: CA+zip: 12345# 使用 '-' 缩小缩进级别
- name: Bobage: 35-address:street: 123 Main Stcity: Anytownstate: CAzip: 12345# 嵌套块使用不同的符号
people:
+ - name: Alice
+ age: 40
+ address:
+ city: Anytown
+ street: 123 Main St
- - name: Eve
- age: 45
- address:
- city: Anytown
- street: 123 Main St