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语法的更多相关文章

  1. YAML 语法

    YAML 语法 来源:yaml 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON ...

  2. saltstack实战3--配置管理之YAML语法

    本文来自如下链接http://docs.saltstack.cn/topics/yaml/index.html 了解YAML 默认的SLS文件的renderer是YAML renderer.YAML是 ...

  3. ansible yaml 语法

    yet another markup language -- 另外的一种标记语言 yaml 语法: 序列:同一个类型的数据有多个,用"-" 来区分,叫序列 映射:价值对,用&quo ...

  4. 【K8S】K8S-网络模型、POD/RC/SVC YAML 语法官方文档

    K8S-网络模型.POD/RC/SVC YAML 语法官方文档 Kubernetes - Production-Grade Container Orchestration kubernetes/kub ...

  5. Ansible 小手册系列 八(Yaml 语法格式)

    YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写.它实质上是一种通用的数据串行化格式. 它的基本语法规则如下. • 大小写敏感 • 使用缩进表示层级关系 • 缩进时不允许使用Ta ...

  6. ansible中yaml语法应用

    4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...

  7. YAML语法基础(K8s基础)

    对于YAML语言,网上有很多将YAML转换为JSON格式的在线转换器,以下内容都可直接验证,另外若有兴趣更深入学习YAML,可到其官方站点去学习,下面介绍的仅仅是比较常用的内容,并非YAML语法的全部 ...

  8. ansible-playbook的YAML语法学习

    YAML:可以将你打算对多机器的批量操作放到一个文件中,顺序执行,可以根据机器做到根据机器信息判断执行,其他命令执行结果判断执行. YAML有着严格的层级要求,稍微有个缩进问题就会无法运行,所以学习过 ...

  9. YAML语法使用,JSR303数据校验

    YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...

  10. SpringBoot-03-配置之yaml语法学习

    3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...

随机推荐

  1. loj516 「LibreOJ β Round #2」DP 一般看规律

    传送门:https://loj.ac/problem/516 [题解] 那段代码求的是相同的数中间隔最小的值. 离散后用set维护每个值出现次数,每次操作相当于合并两个set,这步可以启发式合并. 加 ...

  2. 【51NOD-0】1058 N的阶乘的长度

    [算法]数学 [题解]n!的位数相当于ans=log10(n!)上取整,然后就可以拆出来加了. 可以用log10(i)或log(i)/log(10) 阶乘好像有个斯特林公式…… #include< ...

  3. 2016-2017 2 20155335《java程序设计》第四周总结

    #  20155335    <Java程序设计>第四周学习总结 ##  教材学习内容总结 继承,在本职上是特殊到一般的关系,即is—a关系,子类继承父类,表明子类是一种特殊的父类,并且具 ...

  4. Drainage Ditches(POJ1273+网络流+Dinic+EK)

    题目链接:poj.org/problem?id=1273 题目: 题意:求最大流. 思路:测板子题,分别用Dinic和EK实现(我的板子跑得时间均为0ms). Dinic代码实现如下: #includ ...

  5. 4、什么是事务?MySQL如何支持事务?

    什么是事务? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言:一段程序中可能包含多个事务.(说白了就是几步的数据库操作 ...

  6. ubuntu下调整cpu频率

    环境:ubuntu15.10 查看内核支持的cpu策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 比如我 ...

  7. php中的base64写shell

    <?php system(base64_decode($_GET['info'])); #http://localhost/1.php?info=d2hvYW1p #这只是一个例子 ?>

  8. C++学习之路(八):关于C++提供的强制类型转换

    C语言中提供了旧式的强制类型转换方法.比如: int a  =1; char *p = (char *)&a; 上述将a的地址单元强制转换为char类型的指针.这里暂且不说上述转换结果是否合理 ...

  9. 网络设备之pci_device_id

    标准PCI设备都有一个配置寄存器,用来存储各种参数: /* pci设备配置寄存器 */ struct pci_device_id { /* 厂商id,设备id */ __u32 vendor, dev ...

  10. C json实战引擎 一 , 实现解析部分

    引言 以前可能是去年的去年,写了一个 c json 解析引擎用于一个统计实验数据项目开发中. 基本上能用. 去年在网上 看见了好多开源的c json引擎 .对其中一个比较标准的 cJSON 引擎 深入 ...