zhcn 编程语言 Java Java 流程控制语句 面向初学者的 Python 中的 YAML 简介

面向初学者的 Python 中的 YAML 简介

YAML Ain’t Markup Language (YAML)是大多数编程语言的数据序列化语言。我们来详细了解一下。

YAMLJSON的严格超集,因此用JSON编写的任何内容都可以解析为YAML 。它主要用于项目配置文件,使代码非常容易理解和阅读。

YAML 文件的文件扩展名是.yaml.yml

在本教程中,您将了解 YAML 中存在的不同数据类型以及在 Python 中使用 YAML。完成本教程后,您将能够理解 YAML 及其语法。

即使您还没有查看过 Python 学习资源,您也可能已经熟悉 Python。

YAML 遵循类似于 Python 的缩进语法。但是,您不能使用制表符进行缩进(创建 YAML 文件时请记住这一点)。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

环境

  • 要使用YAML文件,请安装名为pyyaml的 Python 模块。
 pip install pyyaml
  • 将以下代码复制并粘贴到文件中,并将其另存为yaml_script.py
 import yaml

yaml_file = open("learn_yaml.yaml", 'r')
yaml_content = yaml.load(yaml_file)

print("Key: Value")
for key, value in yaml_content.items():
    print(f"{key}: {value}")
  • 使用上面的脚本将 YAML 代码转换为 Python 并探索不同的数据类型。
  • 创建一个名为learn_yaml.yaml的文件,并在其中练习本教程中介绍的各种示例。

让我们继续讨论 YAML 数据类型部分。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

YAML 数据类型

YAML中的所有内容都是键值对。

不同的编程语言对键值对有不同的名称,例如字典、哈希和对象。这些是 YAML 的构建块。

键可以是字符串(带引号的或常规的)、浮点数或整数(支持可能会在未来的更新中发生变化)。此外,该值可以是 YAML 支持的任何数据类型。

让我们看一下 YAML 中存在的不同数据类型。

数字

YAML支持整数、浮点数和指数浮点数。

 integer: 123
float: 123.123
exponential_float: 1.34e+3

如果您在 Python 脚本中评估上述代码,您将得到以下结果:

 Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0

值可以用不同的数字系统表示,例如十进制、八进制和十六进制

  • 前导零 (0)表示八进制数。
  • 前缀0x表示十六进制值。

请参见下面的示例。

 integer: 123
octal: 0123
hexa: 0x123

通过运行Python脚本,可以看到八进制和十六进制转换后的十进制值。您应该看到类似于以下内容的确切输出:

 Key: Value
integer: 123
octal: 83
hexa: 291

YAML 的另一个有趣之处是它可以表示NAN (非数字)Infinity

 not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf

当您运行Python脚本时,您将看到NANinf到Python的转换值。

 Key: Value
not_a_number: nan
infinity: inf
negative_infinity: -inf

这就是关于 YAML 数字类型的全部内容。

细绳

YAML 字符串可以用引号或不带引号来表示。两者很相似。与 JSON 不同,没有硬性规则将所有字符串括在引号中。但是,如果需要使用转义序列,则必须使用双引号

让我们看一些字符串示例。

 string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: "Hi, I am a newline \n character. And I am working :)"

节键值对中的换行符按预期工作。正如已经提到的,必须使用双引号来处理转义序列。

我在以下键值对中使用了双引号,它按预期工作。使用 Python 脚本解释上述 YAML 代码。您将得到如下结果:

 Key: Value
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: Hi, I am a newline 
character. And I am working :)

YAML 有两个特殊字符,您可以使用它们来编写多个语句作为键的值。假设您需要将一个长句子分成多行。在这种情况下,您可以使用折叠 (>>)块 (竖线 |)字符来写入多行。

折叠字母印刷体字母有什么区别?终于到了。

折叠字符不会解释换行符,但字符会解释换行符。

让我们看一个例子。

 multiple lines string with fold character: >
  This is a
  multiple line
  string with fold
  character. Remember to use
  indentation. Newlines won't be
  interpreted.
multiple lines string with block character: |
  This is a
  multiple line
  string with fold
  character. Remember to use
  indentation. Newlines will be
  interpreted.

您可以通过运行 Python 脚本来区分折痕字符字符。不要忘记使用缩进。

 Key: Value
multiple lines string with fold character: This is a multiple line string with fold character. Remember to use indentation. Newlines won't be interpreted.

multiple lines string with block character: This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.

布尔值

YAML 允许您以三种不同的方式表示布尔值TrueFalse 。请看一下。

  • True、OnYes值在 YAML 中被视为True
  • False 、 OffNo在 YAML 中被视为False
 random_key_1: True
random_key_2: On
random_key_3: Yes
random_key_4: False
random_key_5: Off
random_key_6: No

解释上面的 YAML 代码,前三个键值检索为True ,接下来的三个键值检索为False

 Key: Value
random_key_1: True
random_key_2: True
random_key_3: True
random_key_4: False
random_key_5: False
random_key_6: False

无效的

YAML 与 JSON 一样,支持空值。您可以在 YAML 中使用关键字null或符号波形符 (~)定义 null 值。 YAML 有很多替代方案,对吗?它们都很酷。

 null_case_1: null
null_case_2: ~

运行 Python 脚本。 Python 使用None而不是null关键字,因此两个值都以None形式检索。

 Key: Value
null_case_1: None
null_case_2: None

大批

YAML 允许您指定类似于 Python 的数组。或者,您可以将所有数组元素放在单独的行上,前面加上连字符 (-) 。让我们看一下每个表达式的示例。

 programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]

在上面的 YAML 代码中,我使用了类似于 Python 列表的方括号。让我们看一下在 YAML 中表示数组的另一种方式,它看起来像一个 markdown 列表。

 programming_languages:
  - Python
  - JavaScript
  - C
  - HTML
  - CSS
libraries:
  - React
  - TailwindCSS

如果你想使用Python脚本解释上面的例子。您将得到如下输出:

 programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]

列表不仅可以包含字符串、数字等,还可以包含字典。

 programming_languages:
- Python:
author: Guido van Rossum
- JavaScript:
author: Brendan Eich
- C:
author: Dennis Ritchie
libraries:
- React:
popularity: High
- TailwindCSS:
popularity: High

使用 Python 脚本解释上述 YAML 代码将为您提供一个字典数组。

 Key: Value
programming_languages: [{'Python': {'author': 'Guido van Rossum'}}, {'JavaScript': {'author': 'Brendan Eich'}}, {'C': {'author': 'Dennis Ritchie'}}]
libraries: [{'React': {'popularity': 'High'}}, {'TailwindCSS': {'popularity': 'High'}}]

字典

我们已经在上面的例子中看到了字典语法。简单来说,字典就是一个键值对。您可以使用任何有效的数据类型作为键值。 YAML 还支持嵌套字典。

让我们看一个例子。

 dictionary:
  i am key: i am value

nested dictionary:
  nested key:
    i am nested key: i am nested value

解释上面的代码,您将看到相同的结果,如下所示:

 Key: Value
dictionary: {'i am key': 'i am value'}
nested dictionary: {'nested key': {'i am nested key': 'i am nested value'}}

您知道可以在 Python 中将列表转换为字典吗?

YAML 支持另一种称为集合的数据类型。 Set 包含唯一值,类似于 Python 的集合数据类型。正如列表项前面有一个连字符 (-)一样,配置项前面也有一个问号 (?)

需要注意的是,数据类型是在集合名称后使用!!set来设置的。

看一下下面的例子。

 i am a set: !!set
  ? 1
  ? 2
  ? 2
  ? 3

如果你在 Python 脚本中解释上面的 YAML 代码,你不会得到2两次,因为 set 只包含唯一值。

让我们看看结果。

 Key: Value
set: {1, 2, 3}

您还可以类似于 Python 语法来表达集合,如下所示:

 i am a set: !!set
  {1, 2, 2, 3}

您将得到与上面示例完全相同的输出。

这就是关于 YAML 数据类型的全部内容。让我们看一下 YAML 的一些附加功能。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

评论

YAML 支持注释。那太棒了。 YAML 允许您编写以井号 (#)符号开头的注释。

 # I am a comment
yaml is great: # I am a comment too

当您解释上面的 YAML 代码时,您将得到一个带有 null 值的空键。

 Key: Value
yaml is great: None

YAML 不支持多行注释。与Python类似,对于多行注释,需要编写以hash开头的多行。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

锚点允许您将键的内容复制到整个文档的任何位置。当您想要复制文档中的某些内容时,这非常有用。

要使用锚点,必须将锚点的名称定义为编程语言中的变量名称。您可以在整个文档中的任何地方使用它。

您可以使用&定义锚点名称并将其与*一起使用。让我们看一个例子。

 # duplicate_data is the name of the anchor
data: &duplicate_data This content is to duplicate

# dopying the data
duplicate_data: *duplicate_data

在上面的示例中,我们使用duplicate_data锚点来复制数据键值。解释上面的 YAML,两个键包含相同的值。

 Key: Value
data: This content is to duplicate
duplicate_data: This content is to duplicate

结论

我希望您对 YAML 有很好的理解。您现在可以在以下项目配置文件中使用 YAML:更多高级内容请参考YAML官方网站。

祝你编码愉快 🙂

面向初学者的 Python 中的 YAML 简介
适合初学者的 Python 中的 YAML 简介

《Python YAML初学者入门》浅显易懂讲解!您必须观看的 2 个最佳视频

【完全版】この動画1本でPythonの基礎を習得!忙しい人のための速習コース(Python入門)
https://www.youtube.com/watch?v=yeZ3STy3k44&pp=ygU15Yid5b-D6ICF44Gu44Gf44KB44GuIFB5dGhvbiDjgafjga4gWUFNTCDlhaXploAmaGw9SkE%3D

YAML Ain’t Markup Language (YAML)是大多数编程语言的数据序列化语言。我们来详细了解一下。

YAMLJSON的严格超集,因此用JSON编写的任何内容都可以解析为YAML 。它主要用于项目配置文件,使代码非常容易理解和阅读。

YAML 文件的文件扩展名是.yaml.yml

在本教程中,您将了解 YAML 中存在的不同数据类型以及在 Python 中使用 YAML。完成本教程后,您将能够理解 YAML 及其语法。

即使您还没有查看过 Python 学习资源,您也可能已经熟悉 Python。

YAML 遵循类似于 Python 的缩进语法。但是,您不能使用制表符进行缩进(创建 YAML 文件时请记住这一点)。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

环境

  • 要使用YAML文件,请安装名为pyyaml的 Python 模块。
 pip install pyyaml
  • 将以下代码复制并粘贴到文件中,并将其另存为yaml_script.py
 import yaml

yaml_file = open("learn_yaml.yaml", 'r')
yaml_content = yaml.load(yaml_file)

print("Key: Value")
for key, value in yaml_content.items():
    print(f"{key}: {value}")
  • 使用上面的脚本将 YAML 代码转换为 Python 并探索不同的数据类型。
  • 创建一个名为learn_yaml.yaml的文件,并在其中练习本教程中介绍的各种示例。

让我们继续讨论 YAML 数据类型部分。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

YAML 数据类型

YAML中的所有内容都是键值对。

不同的编程语言对键值对有不同的名称,例如字典、哈希和对象。这些是 YAML 的构建块。

键可以是字符串(带引号的或常规的)、浮点数或整数(支持可能会在未来的更新中发生变化)。此外,该值可以是 YAML 支持的任何数据类型。

让我们看一下 YAML 中存在的不同数据类型。

数字

YAML支持整数、浮点数和指数浮点数。

 integer: 123
float: 123.123
exponential_float: 1.34e+3

如果您在 Python 脚本中评估上述代码,您将得到以下结果:

 Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0

值可以用不同的数字系统表示,例如十进制、八进制和十六进制

  • 前导零 (0)表示八进制数。
  • 前缀0x表示十六进制值。

请参见下面的示例。

 integer: 123
octal: 0123
hexa: 0x123

通过运行Python脚本,可以看到八进制和十六进制转换后的十进制值。您应该看到类似于以下内容的确切输出:

 Key: Value
integer: 123
octal: 83
hexa: 291

YAML 的另一个有趣之处是它可以表示NAN (非数字)Infinity

 not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf

当您运行Python脚本时,您将看到NANinf到Python的转换值。

 Key: Value
not_a_number: nan
infinity: inf
negative_infinity: -inf

这就是关于 YAML 数字类型的全部内容。

细绳

YAML 字符串可以用引号或不带引号来表示。两者很相似。与 JSON 不同,没有硬性规则将所有字符串括在引号中。但是,如果需要使用转义序列,则必须使用双引号

让我们看一些字符串示例。

 string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: "Hi, I am a newline \n character. And I am working :)"

节键值对中的换行符按预期工作。正如已经提到的,必须使用双引号来处理转义序列。

我在以下键值对中使用了双引号,它按预期工作。使用 Python 脚本解释上述 YAML 代码。您将得到如下结果:

 Key: Value
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :(
string with working escape character: Hi, I am a newline 
character. And I am working :)

YAML 有两个特殊字符,您可以使用它们来编写多个语句作为键的值。假设您需要将一个长句子分成多行。在这种情况下,您可以使用折叠 (>>)块 (竖线 |)字符来写入多行。

折叠字母印刷体字母有什么区别?终于到了。

折叠字符不会解释换行符,但字符会解释换行符。

让我们看一个例子。

 multiple lines string with fold character: >
  This is a
  multiple line
  string with fold
  character. Remember to use
  indentation. Newlines won't be
  interpreted.
multiple lines string with block character: |
  This is a
  multiple line
  string with fold
  character. Remember to use
  indentation. Newlines will be
  interpreted.

您可以通过运行 Python 脚本来区分折痕字符字符。不要忘记使用缩进。

 Key: Value
multiple lines string with fold character: This is a multiple line string with fold character. Remember to use indentation. Newlines won't be interpreted.

multiple lines string with block character: This is a
multiple line
string with fold
character. Remember to use
indentation. Newlines will be
interpreted.

布尔值

YAML 允许您以三种不同的方式表示布尔值TrueFalse 。请看一下。

  • True、OnYes值在 YAML 中被视为True
  • False 、 OffNo在 YAML 中被视为False
 random_key_1: True
random_key_2: On
random_key_3: Yes
random_key_4: False
random_key_5: Off
random_key_6: No

解释上面的 YAML 代码,前三个键值检索为True ,接下来的三个键值检索为False

 Key: Value
random_key_1: True
random_key_2: True
random_key_3: True
random_key_4: False
random_key_5: False
random_key_6: False

无效的

YAML 与 JSON 一样,支持空值。您可以在 YAML 中使用关键字null或符号波形符 (~)定义 null 值。 YAML 有很多替代方案,对吗?它们都很酷。

 null_case_1: null
null_case_2: ~

运行 Python 脚本。 Python 使用None而不是null关键字,因此两个值都以None形式检索。

 Key: Value
null_case_1: None
null_case_2: None

大批

YAML 允许您指定类似于 Python 的数组。或者,您可以将所有数组元素放在单独的行上,前面加上连字符 (-) 。让我们看一下每个表达式的示例。

 programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]

在上面的 YAML 代码中,我使用了类似于 Python 列表的方括号。让我们看一下在 YAML 中表示数组的另一种方式,它看起来像一个 markdown 列表。

 programming_languages:
  - Python
  - JavaScript
  - C
  - HTML
  - CSS
libraries:
  - React
  - TailwindCSS

如果你想使用Python脚本解释上面的例子。您将得到如下输出:

 programming_languages: [Python, JavaScript, C, HTML, CSS]
libraries: [React, TailwindCSS]

列表不仅可以包含字符串、数字等,还可以包含字典。

 programming_languages:
- Python:
author: Guido van Rossum
- JavaScript:
author: Brendan Eich
- C:
author: Dennis Ritchie
libraries:
- React:
popularity: High
- TailwindCSS:
popularity: High

使用 Python 脚本解释上述 YAML 代码将为您提供一个字典数组。

 Key: Value
programming_languages: [{'Python': {'author': 'Guido van Rossum'}}, {'JavaScript': {'author': 'Brendan Eich'}}, {'C': {'author': 'Dennis Ritchie'}}]
libraries: [{'React': {'popularity': 'High'}}, {'TailwindCSS': {'popularity': 'High'}}]

字典

我们已经在上面的例子中看到了字典语法。简单来说,字典就是一个键值对。您可以使用任何有效的数据类型作为键值。 YAML 还支持嵌套字典。

让我们看一个例子。

 dictionary:
  i am key: i am value

nested dictionary:
  nested key:
    i am nested key: i am nested value

解释上面的代码,您将看到相同的结果,如下所示:

 Key: Value
dictionary: {'i am key': 'i am value'}
nested dictionary: {'nested key': {'i am nested key': 'i am nested value'}}

您知道可以在 Python 中将列表转换为字典吗?

YAML 支持另一种称为集合的数据类型。 Set 包含唯一值,类似于 Python 的集合数据类型。正如列表项前面有一个连字符 (-)一样,配置项前面也有一个问号 (?)

需要注意的是,数据类型是在集合名称后使用!!set来设置的。

看一下下面的例子。

 i am a set: !!set
  ? 1
  ? 2
  ? 2
  ? 3

如果你在 Python 脚本中解释上面的 YAML 代码,你不会得到2两次,因为 set 只包含唯一值。

让我们看看结果。

 Key: Value
set: {1, 2, 3}

您还可以类似于 Python 语法来表达集合,如下所示:

 i am a set: !!set
  {1, 2, 2, 3}

您将得到与上面示例完全相同的输出。

这就是关于 YAML 数据类型的全部内容。让我们看一下 YAML 的一些附加功能。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

评论

YAML 支持注释。那太棒了。 YAML 允许您编写以井号 (#)符号开头的注释。

 # I am a comment
yaml is great: # I am a comment too

当您解释上面的 YAML 代码时,您将得到一个带有 null 值的空键。

 Key: Value
yaml is great: None

YAML 不支持多行注释。与Python类似,对于多行注释,需要编写以hash开头的多行。

面向初学者的 Python 中的 YAML 简介
面向初学者的 Python 中的 YAML 简介

锚点允许您将键的内容复制到整个文档的任何位置。当您想要复制文档中的某些内容时,这非常有用。

要使用锚点,必须将锚点的名称定义为编程语言中的变量名称。您可以在整个文档中的任何地方使用它。

您可以使用&定义锚点名称并将其与*一起使用。让我们看一个例子。

 # duplicate_data is the name of the anchor
data: &duplicate_data This content is to duplicate

# dopying the data
duplicate_data: *duplicate_data

在上面的示例中,我们使用duplicate_data锚点来复制数据键值。解释上面的 YAML,两个键包含相同的值。

 Key: Value
data: This content is to duplicate
duplicate_data: This content is to duplicate

结论

我希望您对 YAML 有很好的理解。您现在可以在以下项目配置文件中使用 YAML:更多高级内容请参考YAML官方网站。

祝你编码愉快 🙂

面向初学者的 Python 中的 YAML 简介
适合初学者的 Python 中的 YAML 简介

《Python YAML初学者入门》浅显易懂讲解!您必须观看的 2 个最佳视频

【完全版】この動画1本でPythonの基礎を習得!忙しい人のための速習コース(Python入門)
https://www.youtube.com/watch?v=yeZ3STy3k44&pp=ygU15Yid5b-D6ICF44Gu44Gf44KB44GuIFB5dGhvbiDjgafjga4gWUFNTCDlhaXploAmaGw9SkE%3D