第3天:YAML语法
YAML是一种可读性很强的数据格式语言。正是由于YAML良好的可读性,其广泛引用于软件配置中。
语法规则
- YAML文件中的第一行为"---",表示这是一个YAML文件;
 - YAML中的字段大小写敏感
 - YAML与Python一样,使用缩进表示层级关系
 - YAML的缩进不允许使用Tab键,只允许使用空格,且空格的数目不重要,只要相同层级的元素左侧对齐即可
 - "#"表示注释,从这个字符一直到行尾都会被解析器忽略
 
YAML支持三种格式的数据,分别是:
- 对象:键值对的集合,又称为映射,类似于Python中的字典
 - 数组:一组按次序排列的值,有称为序列,类似于Python中的列表
 - 纯量:单个的,不可 再分的值,如字符串、布尔值与数字
 
YAML例子演示
下面结合Python来看几个YAML的例子,这些自理没有包含YAML的全部语法,但是足够理解和编写Ansible的Playbook.
为了解析YAML格式的文件,需要安装第三方的PyYAML库。直接使用pip安装即可:
pip install PyYAML
在YAML中的数组,只需要用"-"将元素按序列出即可, 比如有一个data.yaml文件,内容如下
---
#一个美味水果的列表
- Apple
- Orange
- Strawberry
- Mango
使用PyYAML库解析YAML文件非常简单,如下
In [1]: import yaml
In [2]: with open('data.yaml') as f:
   ...:     print(yaml.load(f))
   ...:
['Apple', 'Orange', 'Strawberry', 'Mango']
在YAML中,对象以"key:value"的形式进行定义,如下
---
#以为职工的记录
name: Example Developer
job: Developer
skill: Elite
转换为python内部对象以后,结果如下:
{'skill': 'Elite', 'job': 'Developer', 'name': 'Example Developer'}
YAML中可以使用多种方式指定布尔值,例如下面的格式都是合法的
---
create_key: yes
needs_agent: no
knows_oopL: True
like_emacs: TRUE
uses_cvs: false
转换为python代码以后,对变量的取值进行了格式化
{'create_key': True, 'like_emacs': True, 'needs_agent': False, 'knows_oopL': True, 'uses_cvs': False}
YAML中的对象和数组也可以任意嵌套
---
#一位职工记录
name: heboan
job: sa
skill: Elite
employed: True
foods:
- Apple
- Orange
- Strawberry
- Mango
languages:
ruby: Elite
python: Elite
dotnet: Lame
将上面的YAML转换为Python的内部对象结果如下
{
    'languages': {
        'python': 'Elite',
        'dotnet': 'Lame',
        'ruby': 'Elite'
        },
    'foods': [
        'Apple',
        'Orange',
        'Strawberry',
        'Mango'
    ],
    'name': 'heboan',
    'employed': True,
    'skill': 'Elite',
    'job': 'sa'
}
在YAML中定义字符串时,甚至都不需要使用单引号或双引号,直接写在文件建中即可:
str: this is a string
如果字符串中包含特殊字符,需要使用双引号包含起来,如冒号
str: "somebody said I should put a colon here: so I did"
如果字符串的内容较长,可以使用">"来折叠换行,也就是说,接下来的缩进的内容都是这个字符串的一部分:
---
str: >
my name is heboan
cccc
转换成python如下:
{'str': 'my name is heboan cccc\n'}
第3天:YAML语法的更多相关文章
- YAML 语法
		
YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...
 - saltstack实战3--配置管理之YAML语法
		
本文来自如下链接http://docs.saltstack.cn/topics/yaml/index.html 了解YAML 默认的SLS文件的renderer是YAML renderer.YAML是 ...
 - ansible yaml 语法
		
yet another markup language -- 另外的一种标记语言 yaml 语法: 序列:同一个类型的数据有多个,用"-" 来区分,叫序列 映射:价值对,用&quo ...
 - 【K8S】K8S-网络模型、POD/RC/SVC YAML 语法官方文档
		
K8S-网络模型.POD/RC/SVC YAML 语法官方文档 Kubernetes - Production-Grade Container Orchestration kubernetes/kub ...
 - Ansible 小手册系列 八(Yaml 语法格式)
		
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下. • 大小写敏感 • 使用缩进表示层级关系 • 缩进时不允许使用Ta ...
 - ansible中yaml语法应用
		
4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...
 - YAML语法基础(K8s基础)
		
对于YAML语言,网上有很多将YAML转换为JSON格式的在线转换器,以下内容都可直接验证,另外若有兴趣更深入学习YAML,可到其官方站点去学习,下面介绍的仅仅是比较常用的内容,并非YAML语法的全部 ...
 - ansible-playbook的YAML语法学习
		
YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...
 - YAML语法使用,JSR303数据校验
		
YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...
 - SpringBoot-03-配置之yaml语法学习
		
3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...
 
随机推荐
- centos6.8+openvpn实现账户密码连接(通过端口映射的方式)
			
#搭建openvpn(编译安装) 初始化环境 #update epel mirror yum install wget -y cd /etc/yum.repos.d && rm -rf ...
 - debussy与modelsim的联调设置
			
前段时间看到网上有人在使用debussy软件对Verilog代码进行调试,而且都称赞其是多么的好用,看着很是馋人,说吧,现在用的是quartus与modelsim的联调,似乎还是可以的,但就是每次稍微 ...
 - bzoj 1452: [JSOI2009]Count ——二维树状数组
			
escription Input Output Sample Input Sample Output 1 2 HINT ———————————————————————————————————————— ...
 - [BZOJ2440]完全平方数解题报告|莫比乌斯函数的应用
			
完全平方数 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是小X的生日 ...
 - 爬虫--BeautifulSoup
			
什么是BeautifulSoup? BeautifulSoup支持的一些解析库 基本使用 from bs4 import BeautifulSoup html =""" ...
 - .Net MVC4 上传大文件,并保存表单
			
1. 前台 cshtml </pre><pre name="code" class="csharp">@model BLL.BLL.Pr ...
 - Python ctypes 在 Python 2  和 Python 3 中的不同  //  使用ctypes过程中问题汇总
			
In Python 2.7, strings are byte-strings by default. In Python 3.x, they are unicode by default. Try ...
 - pcap的安装
			
pcap,即 packet capture library 抓包库,这个抓包库给抓包系统提供了一个高层次的接口.所有网络上的数据包,甚至是那些发送给其他主机的,通过这种机制,都是可以捕获的.它也支持把 ...
 - C++之复制控制
			
只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数叫做复制构造函数(有时也称为拷贝构造函数),例如: class Person{ public: Person();/ ...
 - python基础===codecs打开文件,解决文件编码格式的问题
			
codecs https://docs.python.org/3/library/codecs.html 我们经常用open打开文件的时候会出现各式各样的错误,编码格式的问题,等等~真的很烦 现在尽量 ...