yaml语言入门(YAML Ain‘t Markup Language)

在这里插入图片描述

文章目录

  • YAML
    • 为什么YAML强调自己不是一种标记语言?
    • YAML文件与HTML、XML、JSON标记语言的异同
  • YAML的基本语法
  • YAML严格的格式要求
    • 文件示例
  • 代码示例
    • python解析yaml示例
      • 示例1
      • 示例2
    • python组包yaml示例
  • 其他问题
    • yaml中的引用的作用和用法

YAML

YAML(YAML Ain’t Markup Language 强调不是一种标记语言)是一种人类可读的数据序列化格式。它的设计目标是使数据在不同编程语言之间易于传输和解析。YAML文件通常用于配置文件、数据交换和存储。

YAML最初由Clark Evans于2001年设计,并在2002年发布了第一个版本。它的设计灵感来自于其他数据序列化格式,如XML、JSON和电子邮件的头部。YAML的目标是提供一种简洁、易读、易写的数据格式,同时保持与现有编程语言的集成性。

为什么YAML强调自己不是一种标记语言?

YAML强调自己不是一种标记语言,是因为它与传统的标记语言(如HTML、XML)有一些重要的区别。

  1. 可读性:YAML的设计目标之一是易读性,它使用了一种简洁、直观的语法,使得人类可以轻松地阅读和理解YAML文件。相比之下,标记语言通常使用繁琐的标签和属性,使得文件更难以阅读和理解。

  2. 简洁性:YAML的语法非常简洁,可以用更少的字符来表达相同的信息。相比之下,标记语言通常需要更多的标签和属性来描述数据结构。

  3. 数据序列化:YAML是一种通用的数据序列化格式,可以轻松地在不同编程语言之间进行数据交换和存储。相比之下,标记语言通常用于描述文档结构和样式,不太适合用于数据序列化。

  4. 编程语言集成:YAML与许多编程语言有很好的集成性,可以方便地将YAML文件解析为相应的数据结构。

YAML强调自己不是一种标记语言,是因为它具有与传统标记语言不同的特点和优势,更适合用于数据序列化和配置文件。

YAML文件与HTML、XML、JSON标记语言的异同

  1. 语法:YAML使用缩进和特定的符号来表示数据结构,而HTML、XML和JSON使用标签、属性和键值对来表示数据结构。YAML的语法更加简洁、直观,易于阅读和编写。

  2. 用途:YAML主要用于配置文件和数据序列化,而HTML和XML主要用于描述文档结构和内容,JSON主要用于数据交换和存储。YAML更适合用于配置文件和复杂数据结构的表示,而HTML、XML和JSON更适合用于表示文档和简单数据结构。

  3. 数据类型:YAML支持多种数据类型,包括字符串、数字、布尔值、日期等,而HTML、XML和JSON主要支持字符串、数字和布尔值。YAML的数据类型更丰富,可以更准确地表示数据。

  4. 扩展性:HTML和XML可以通过自定义标签和属性来扩展其语义,而JSON和YAML的扩展性相对较弱。HTML和XML可以通过CSS和XSLT等技术进行样式和转换,而JSON和YAML通常需要使用专门的解析器或库来处理。

  5. 可读性:YAML强调可读性,其语法设计使得文件更易于阅读和理解。HTML、XML和JSON的语法相对较繁琐,文件更难以阅读和理解。

YAML的基本语法

YAML使用缩进和特定的符号来表示数据结构。下面是一些基本的语法规则:

  1. 注释:以#开头的行表示注释,注释内容将被忽略。

  2. 键值对:使用冒号:将键和值分隔,键值对可以写在一行上,也可以写在多行上。

    key: value
    
  3. 列表:使用短横线-表示列表项,列表项可以写在一行上,也可以写在多行上。

    - item1
    - item2
    
  4. 嵌套结构:可以使用缩进来表示嵌套的数据结构。

    key1:
      key2: value
    
  5. 引用:可以使用&定义一个引用,使用*引用一个已定义的引用。

    key1: &ref value
    key2: *ref
    
  6. 多行字符串:使用|表示保留换行符的多行字符串,使用>表示折叠换行符的多行字符串。

    key: |
      This is a
      multiline
      string.
    
    key: >
      This is a
      folded
      string.
    

这只是YAML的一些基本语法规则,YAML还支持更多的特性和数据类型,如映射、标量、日期等。详细的语法规范可以参考YAML官方网站。

YAML严格的格式要求

YAML文件对于格式有严格的要求。以下是一些常见的格式规则:

  1. 缩进:使用空格进行缩进,不要使用制表符。缩进的数量可以是2个空格、4个空格或者其他数量,但是在一个文件中必须保持一致。

  2. 键值对:使用冒号(:)将键和值分隔开,键和值之间必须有一个空格。

  3. 列表:使用短横线(-)表示列表项,短横线后面必须有一个空格。

  4. 注释:使用井号(#)表示注释,井号后面的内容将被忽略。

  5. 字符串:字符串可以使用单引号(')或双引号(")括起来,如果字符串中包含特殊字符,可以使用转义字符进行转义。

  6. 多行字符串:如果字符串需要跨多行,可以使用竖线(|)或大于号(>)进行表示。竖线表示保留换行符,大于号表示将换行符转换为空格。

文件示例

下面是一个符合上述格式规则的YAML文件示例:

# YAML文件示例

# 键值对示例
name: John Doe
age: 30
email: john.doe@example.com

# 列表示例
fruits:
  - apple
  - banana
  - orange

# 多行字符串示例
description: |
  This is a multi-line
  string example.
  It preserves line breaks.

# 字符串中的特殊字符转义示例
special_characters: "This string contains special characters: \", \\, \n, \t"

# 嵌套结构示例
person:
  name: Jane Smith
  age: 25
  address:
    street: 123 Main St
    city: New York
    country: USA

注意,示例中的缩进使用了两个空格。

代码示例

python解析yaml示例

有以下yaml文件:

example.yaml

name: John Smith
age: 30
address:
  street: 123 Main St
  city: Anytown
  state: NY
  country: USA

我们通过以下python代码来读取并解析它:

在这里插入图片描述

示例1

parse.py

import yaml

# 读取YAML文件
with open('example.yaml', 'r') as file:
    yaml_data = yaml.safe_load(file)

# 打印YAML内容


def print_yaml_data(data, indent=0):
    for key, value in data.items():
        if isinstance(value, dict):
            print(f"{' ' * indent}{key}:")
            print_yaml_data(value, indent + 2)
        else:
            print(f"{' ' * indent}{key}: {value}")


print('\n')

# 直接打印解析内容
print(yaml_data)

print('\n')

# 格式化打印
print_yaml_data(yaml_data)

print('\n')

运行python3 parse.py

在这里插入图片描述

示例2

parse.py

import yaml

# 读取YAML文件
with open('example.yaml', 'r') as file:
    yaml_data = yaml.safe_load(file)

# 将YAML内容存储到容器中
name = yaml_data['name']
age = yaml_data['age']
address = yaml_data['address']

street = address['street']
city = address['city']
state = address['state']
country = address['country']

# 打印存储的数据
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Street: {street}")
print(f"City: {city}")
print(f"State: {state}")
print(f"Country: {country}")

运行结果:

在这里插入图片描述

python组包yaml示例

在这里插入图片描述

construct.py

import yaml

# 要组装的数据
name = 'Tylor Swift'
age = 23
street = '123 Main St'
city = 'Anytown'
state = 'NY'
country = 'USA'

# 组装数据为字典
data = {
    'name': name,
    'age': age,
    'address': {
        'street': street,
        'city': city,
        'state': state,
        'country': country
    }
}

# 将数据写入YAML文件
with open('example.yaml', 'w') as file:
    yaml.dump(data, file)

运行结果:

在这里插入图片描述

在这里插入图片描述

其他问题

yaml中的引用的作用和用法

在YAML中,引用(references)用于引用其他地方定义的值或数据结构。引用可以帮助减少重复的数据,并提高YAML文件的可读性和可维护性。

引用在YAML中使用&符号定义,并使用*符号进行引用。具体来说,引用有两个主要的应用场景:

  1. 引用标量值:可以使用引用来引用一个标量值,并在其他地方重复使用。这样可以避免在多个地方重复定义相同的值,提高了文件的可读性和可维护性。例如:
name: &name_ref John Smith

person1:
  name: *name_ref

person2:
  name: *name_ref

在上面的例子中,&name_ref定义了一个引用,指向值John Smith。然后,在person1person2中使用*name_ref引用了这个值,避免了重复定义。

  1. 引用数据结构:可以使用引用来引用一个数据结构,并在其他地方重复使用。这对于复杂的数据结构特别有用,可以避免在多个地方重复定义相同的结构,提高了文件的可读性和可维护性。例如:
person: &person_ref
  name: John Smith
  age: 30

person1: *person_ref

person2: *person_ref

在上面的例子中,&person_ref定义了一个引用,指向一个包含nameage字段的数据结构。然后,在person1person2中使用*person_ref引用了这个数据结构,避免了重复定义。

通过使用引用,可以在YAML文件中更好地组织和管理数据,减少冗余,并提高文件的可读性和可维护性。文章来源地址https://uudwc.com/A/AZreO

原文地址:https://blog.csdn.net/Dontla/article/details/131575808

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年07月10日 19:47
SpringBoot项目多模块打包部署Docker实战
下一篇 2023年07月10日 19:50