YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用

简介: YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用

1 字符流

1.1 表示方式

  • YAML字符流是将多个文档放在同一个文件中,通过“—”分隔符进行分割;
  • 示例:
---
user1:
  name: xiaoming
  age: 23
  password: 123456
---
user2:
  name: xiaozhang
  age: 24
  password: 123456
---
user3:
  name: xiaoli
  age: 25
  password: 123456
  • 以上包含了三个文档,每个文档都以“—”分隔符作为开始标志;
  • 需要逐个读取每个文档,然后将它们解析为相应的YAML对象。

1.2 字符流解析

  • 使用PyYAML库读取YAML字符流;
  • 通过load_all函数,将字符流中的每个文档解析为YAML对象;
  • 由于一个文档可能包括多个对象,因此需要使用循环逐个读取每个文档,然后解析其中的对象。
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/7/28 
# 文件名称:yaml_read01.py
# 作用:字符流解析
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import 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: 1
  name: xiaoli
  age: 33

- id: 2
  name: xiaowang
  age: 44

对象属性的定义

# 定义一个 student 对象
- person:
    id: 1
    name: xiaozhagn
    age: 45

列表属性的定义

# 定义一个列表
- person:
    - xiaozhang
    - xiaoli
    - xiaowang

属性的嵌套

# 定义一个嵌套的对象
 - person:
    id: 123
    name: xiaowang
    age: 99
    grades:
      math: 100
      science: 100
      history: 100

3 块伸缩标头

  • 块是一种结构,为结构化数据提供缩进关系的文本块;
  • 块之间的关系可以使用细节和更高的缩放级别进行解释和表述;
  • 块伸缩标头就是定义块扩展和缩放的一种方法,可以使 YAML 代码的可读性和可维护性更高。
# 块缩进级别为 0
name: John
age: 25
address:
  street: 123 Main St
  city: Anytown
  state: CA
  zip: 12345

# 使用 '+' 扩大缩进级别
- name: Jane
  age: 30
  address:
    +street: 123 Main St
    +city: Anytown
    +state: CA
    +zip: 12345

# 使用 '-' 缩小缩进级别
- name: Bob
  age: 35
  -address:
    street: 123 Main St
    city: Anytown
    state: CA
    zip: 12345

# 嵌套块使用不同的符号
people:
+  - name: Alice
+    age: 40
+    address:
+      city: Anytown
+      street: 123 Main St
-  - name: Eve
-    age: 45
-    address:
-      city: Anytown
-      street: 123 Main St
目录
相关文章
|
9月前
|
安全 Python
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
YAML+PyYAML笔记 8 | PyYAML源码之full_load(),full_load_all(),safe_load(),unsafe_load(),unsafe_load_all()
65 1
|
9月前
|
Python
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
82 0
|
9月前
|
Python
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
49 2
|
10月前
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
38 0
|
10月前
YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用
58 0
|
Java
springboot的yaml属性配置文件注入
SpringBoot中默认的从application.properties文件中加载参数 我们通常把springboot中资源目录下的application.properties文件改成application.yaml,因为yaml文件更具有层次感。
1422 0
|
4天前
|
存储 IDE 测试技术
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
玩转数据处理利器:学会使用 YAML 文件轻松处理数据
61 0
|
7月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
146 0
|
7月前
|
Web App开发 资源调度 JavaScript
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
SAP Fiori Elements 应用里的 ui5.yaml 文件详解试读版
78 0
|
7月前
|
Kubernetes 应用服务中间件 nginx
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208
kubernetes集群命令行工具kubectl介绍&yaml文件介绍-20230208

热门文章

最新文章