YAML Ain’t Markup Language (YAML)是大多数编程语言的数据序列化语言。我们来详细了解一下。
YAML是JSON的严格超集,因此用JSON编写的任何内容都可以解析为YAML 。它主要用于项目配置文件,使代码非常容易理解和阅读。
YAML 文件的文件扩展名是.yaml或.yml 。
在本教程中,您将了解 YAML 中存在的不同数据类型以及在 Python 中使用 YAML。完成本教程后,您将能够理解 YAML 及其语法。
即使您还没有查看过 Python 学习资源,您也可能已经熟悉 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 数据类型部分。

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: 291YAML 的另一个有趣之处是它可以表示NAN (非数字)和Infinity 。
not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf当您运行Python脚本时,您将看到NAN和inf到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 允许您以三种不同的方式表示布尔值True和False 。请看一下。
- True、On和Yes值在 YAML 中被视为True 。
- 值False 、 Off和No在 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 的一些附加功能。

评论
YAML 支持注释。那太棒了。 YAML 允许您编写以井号 (#)符号开头的注释。
# I am a comment
yaml is great: # I am a comment too当您解释上面的 YAML 代码时,您将得到一个带有 null 值的空键。
Key: Value
yaml is great: NoneYAML 不支持多行注释。与Python类似,对于多行注释,需要编写以hash开头的多行。

锚
锚点允许您将键的内容复制到整个文档的任何位置。当您想要复制文档中的某些内容时,这非常有用。
要使用锚点,必须将锚点的名称定义为编程语言中的变量名称。您可以在整个文档中的任何地方使用它。
您可以使用&定义锚点名称并将其与*一起使用。让我们看一个例子。
# 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官方网站。
祝你编码愉快 🙂




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

