YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: YAML+PyYAML笔记 3 | YAML集合、结构、标量、标记使用

1 集合

YAML 支持三种集合类型:列表,映射和集。

1.1 列表

  • 列表是一种序列结构,它使用连字符“-”表示;
  • 如下三个元素的列表,元素之间用“-”
fruit:
 - apple
 - rubber
 - pear
  • 使用Pyyaml解析:
# 解析
with open("config_jihe.yaml") as f:
    yaml_data2 = yaml.load(f, Loader=yaml.FullLoader)
print(yaml_data2)

# 输出
{
   'fruit': ['apple', 'rubber', 'pear']}

1.2 映射

  • 即一种键值对结构,它使用冒号“:”表示;
  • 如下:
fruit:
  - apple
  - rubber
  - pear

vegetable:
  green: cucumber
  red: tomato
  yellow: corn
  • 使用Pyyaml解析:
{
   'fruit': ['apple', 'rubber', 'pear'], 'vegetable': {
   'green': 'cucumber', 'red': 'tomato', 'yellow': 'corn'}}

1.3 集

  • 无序不重复的数据类型;
  • 用大括号“{}”表示;
tree: {
   poplar, willow, pine}
{
   'tree': {
   'poplar': None, 'willow': None, 'pine': None}}

2 结构

  • 可用于任何数据类型的复杂性结构;
  • 包括集合和其他数据类型。

    2.1 多行结构

  • 表示复杂数据类型的方式;
  • 如下:
vegetable:
  green: cucumber
  red: tomato
  yellow: corn

tree:
  one: poplar
  two: willow
  three: pine
{
   'vegetable': {
   'green': 'cucumber', 'red': 'tomato', 'yellow': 'corn'}, 'tree': {
   'one': 'poplar', 'two': 'willow', 'three': 'pine'}}

2.2 单行结构

  • 在一行上表示复杂的结构:
  • 如下:
data: {
   vegetable: {
   green: cucumber, red: tomato, yellow: corn}, tree: {
   one: poplar, two: willow, three: pine}}
{
   'data': {
   'vegetable': {
   'green': 'cucumber', 'red': 'tomato', 'yellow': 'corn'}, 'tree': {
   'one': 'poplar', 'two': 'willow', 'three': 'pine'}}}

3 字面量

  • 字面量可以表示字符串、数字、布尔值、null 值等;
# 字符串:在双引号中使用转义符号来表示特殊字符
str: "Hello,\\nWorld!"

# 数字:可以表示整数和浮点数
int: 88888
float: 3.141592653

# 布尔值:可以使用true和false表示
boolean: true

# null 值:使用 null 来表示空值
empty: null
  • 使用Pyyaml解析:
{
   'str': 'Hello,\\nWorld!', 'int': 88888, 'float': 3.141592653, 'boolean': True, 'empty': None}

4 标量

  • 分为单引号、双引号和无引号;
# 单引号:表示精确字符串,不会进行转义
single: 'Hello,\nworld!'

# 双引号:表示标准字符串,可以进行转义
double: "Hello,\\nworld!"

# 无引号:可以识别特殊字符,但空格会自动被转义成字符串
none: hello world
{
   'single': 'Hello,\\nworld!', 'double': 'Hello,\\nworld!', 'none': 'hello world'}

5 标记

# !!str:表示字符串类型。如:
key: !!str string

# !!int:表示整数类型。如:
key: !!int 123

# !!float:表示浮点数类型。如:
key: !!float 3.14

# !!bool:表示布尔类型。如:
key: !!bool true

# &name:为数据定义一个锚点,可以在后面使用锚点引用。如:
person: &p
name: xiaozhang
age: 88

student:
<<: *p
grade: 100

6 指示符

  • 指示符包括用于描述YAML文档内容的特殊语义:
编号 字符 功能
1 _ 表示块序列条目
2 ? 表示映射键
3 : 表示映射值
4 , 表示流集合条目
5 [ 开始流序列
6 ] 结束流序列
7 { 启动流映射
8 } 结束流映射
9 # 表示注释
10 & 表示节点的锚属性
11 * 表示别名节点
12 ! 表示节点的标签
13 Ι 表示一个字面块标量
14 > 表示折叠块标量
15 ' 单引号围绕引用的流标量
16 " 双引号包围双引号流标量
17 % 表示使用的指令
目录
相关文章
|
3月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
103 0
|
6月前
|
存储 JSON JavaScript
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
"YAML Ain't Markup Language"(简称YAML)是一种专为人类设计的数据序列化语言,适用于多种现代编程语言,可广泛应用于各类日常任务。它是一种以人类可读形式呈现的、适用于多种语言的Unicode数据序列化标准。它基于敏捷编程中常见的本地数据结构,广泛应用于配置文件、互联网消息传递、对象持久化以及数据审计等多个领域。遵循Unicode标准、
675 8
【YAML语法规范指南】从入门到精通,揭秘神秘语法,引领配置文件解析指南(基础结构篇)
|
安全 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
|
6月前
|
算法 Go vr&ar
YOLOv8模型yaml结构图理解(逐层分析)
YOLOv8模型yaml结构图理解(逐层分析)
7139 0
|
6月前
|
JSON Kubernetes API
k8s学习-k8s资源对象与yaml结构
k8s学习-k8s资源对象与yaml结构
104 0
|
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
YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用
YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用
65 0
|
2月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
下一篇
无影云桌面