YAML语言教程与使用案例,如何编与读懂写YAML文件。
YAML概要
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。
YAML是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。
基本语法
1、大小写敏感
2、使用缩进表示层级关系
3、缩进时不允许使用Tab键,只允许使用空格
4、缩进的空格数不重要,只要相同层级的元素左侧对齐即可。【实际使用中建议两个空格作为一个层级的缩进】
5、# 表示注释,从这个字符一直到行尾,都会被解释器忽略
6、冒号,以冒号结尾除外,其他所有冒号后面必须有空格
7、短横线,表示列表项,使用一个短横线加一个空格;多个项使用同样的缩进级别作为同一列表
支持的数据结构
1、对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
2、数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
3、字面量/纯量(数字、字符串、布尔值)(scalars):单个的、不可再分的值
YAML 组织结构
YAML 文件可以由一或多个文档组成(即相对独立的组织结构组成),文档间使用“---”(三个横线)在每文档开始作为分隔符(可选)。同时,文档也可以使用“...”(三个点号)作为结束符(可选)。如下图所示:
备注:如果只是单个文档,分隔符“---”可省略。
每个文档并不需要使用结束符“...”来表示结束,但是对于网络传输或者流来说,有明确结束的符号,有利于软件处理。(例如不需要知道流关闭就能知道文档结束)
Python中yaml模块的使用
Python pip 安装
如果未安装pip,则可以使用以下方法来安装:
1 | # curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 |
用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本。
pip安装yaml与导入
安装pyyaml
1 | # pip install pyyaml # 或者pip3 install pyyaml |
检查是否安装成功:
1、命令行输入:python
2、再输入:import yaml
安装成功后,在脚本里导入的语句,都是 import yaml
YAML-对象数据类型
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
对象数据:是一组键值对,使用冒号结构表示。
单个对象文档文件
yaml文件
1 | [root@docker02 yaml]# cat demo_01_obj.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_01_obj.py |
输出结果
1 | [root@docker02 yaml]# python demo_01_obj.py |
多个对象文档文件
yaml文件,仔细对比下加了”---“和”...“ 的区别
1 | [root@docker02 yaml]# cat demo_02_obj.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_02_obj.py |
输出结果
1 | [root@docker02 yaml]# python demo_02_obj.py |
YAML-数组数据类型
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
数组类型:一组连词线开头的行,构成一个数组
yaml文件
1 | [root@docker02 yaml]# cat demo_03_list.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_03_list.py |
输出结果
1 | [root@docker02 yaml]# python demo_03_list.py |
YAML-复合结构
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
复合结构:对象和数组可以结合使用,形成复合结构
yaml文件,注意其书序格式,并细细对比输出结果
1 | [root@docker02 yaml]# cat demo_04_compose.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_04_compose.py |
输出结果,仔细对比下
1 | [root@docker02 yaml]# python demo_04_compose.py |
YAML-纯量数据类型
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
纯量是最基本的,不可再分的值,包括:
1 | 字符串 |
常用数据类型的表示格式进行了约定
1 | [root@docker02 yaml]# cat demo_05_scalars.yml |
双叹号强制转换类型
yaml文件
1 | [root@docker02 yaml]# cat demo_06_switch.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_06_switch.py |
输出结果,仔细对比下
1 | [root@docker02 yaml]# python demo_06_switch.py |
YAML-引用
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点。
yaml文件
1 | [root@docker02 yaml]# cat demo_07_anchor.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_07_anchor.py |
输出结果,仔细对比下
1 | [root@docker02 yaml]# python demo_07_anchor.py |
YAML-字符串
备注:之所以对yaml文件使用Python进行解析,是因为我们要测验yaml文件格式是否书写正确。
字符串是最常见,也是最复杂的一种数据类型。
字符串默认不使用引号表示。
1 | str: 这是一行字符串 |
如果字符串之中包含空格或特殊字符,需要放在引号之中。
1 | str: '内容: 字符串' |
单引号和双引号都可以使用,双引号不会对特殊字符转义。
1 | s1: '内容\n字符串' |
单引号之中如果还有单引号,必须连续使用两个单引号转义。
1 | str: 'labor''s day' |
字符串可以写成多行,从第二行开始,必须有空格缩进。换行符会被转为空格。
1 | str: 这是一段 |
多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行。
1 | this: | |
+ 表示保留字符串行末尾的换行,- 表示删除字符串末尾的换行。
1 | s1: | |
字符串之中可以插入 HTML 标记。
1 | message: | |
字符串测验案例
yaml文件
1 | [root@docker02 yaml]# cat demo_08_str.yml |
Python解析
1 | [root@docker02 yaml]# cat demo_08_str.py |
输出结果,仔细对比下
1 | [root@docker02 yaml]# python demo_08_str.py |
完毕!