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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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
目录
相关文章
|
3月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
103 0
|
5月前
|
SQL Kubernetes 数据处理
实时计算 Flink版产品使用问题之在 flink-conf.yaml 中定义的配置在某些情况下未被正确应用到 K8s 上运行的任务管理器(JobManager)和任务管理节点(TaskManager),是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
安全 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()
130 1
|
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()
73 2
|
Python
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
YAML+PyYAML笔记 9 | PyYAML源码之dump(),dump_all(),safe_dump(),yaml.YAMLObject
125 0
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
YAML+PyYAML笔记 5 | YAML流样式、块样式、序列样式、Flow Mappings
57 0
|
Java
springboot的yaml属性配置文件注入
SpringBoot中默认的从application.properties文件中加载参数 我们通常把springboot中资源目录下的application.properties文件改成application.yaml,因为yaml文件更具有层次感。
1454 0
|
2月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
5月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
1月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
下一篇
无影云桌面