Yaml - QLGQ/learning-python GitHub Wiki

Introduction

YAML是一种用来表达数据序列的编程语言,它的主要特点包括:可读性强、语法简单明了、支持丰富的语言解析库、通用性强等。ansible环境中配置文件都以YAML格式存在。

块序列描述

块序列就是将描述的元素序列到Python的列表(List)中。以下代码演示了YAML与Python的对应关系:

import yaml
obj = yaml.load(
"""
 - Hesperiidae
 - Papilionidae
 - Apatelodidae
 - Epiplemidae
""")
print obj

本例中引用“-”来分隔列表中的每个元素,运行结果如下:

['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae']

YAML也存在类似于Python块的概念,例如:

-
 - Hesperiidae
 - Papilionidae
 - Apatelodidae
 - Epiplemidae
- 
 - China
 - USA
 - Japan

对应的Python结果为:['Hesperiidae', 'Papilionidae', 'Apatelodidae', 'Epiplemidae'], ['China', 'USA', 'Japan'](/QLGQ/learning-python/wiki/'Hesperiidae',-'Papilionidae',-'Apatelodidae',-'Epiplemidae'],-['China',-'USA',-'Japan')

块映射描述

块映射就是将描述的元素序列到Python的字典(Dictionary)中,格式为“键(key):值(value)”,以下为YAML例子:

hero:
  hp: 34
  sp: 8
  level: 4
orc:
  hp: 12
  sp: 0
  level: 2

对应的Python结果为:{'hero': {'hp': 34, 'sp': 8, 'level': 4}, 'orc': {'hp': 12, 'sp': 0, 'level': 2}}

当然,YAML块序列与块映射是可以自由组合在一起的,它们之间可以互相嵌套,通过非常灵活的组合,可以帮助我们描述更加复杂的对象属性,例如:

- hero:
    hp: 34
    sp: 8
    level: 4
- orc:
    hp:
     - 12
     - 30
    sp: 0
    level: 2

对应的Python结果为:[{'hero': {'hp': 34, 'sp': 8, 'level': 4}}, {'orc': {'hp': [12, 30], 'sp': 0, 'level': 2}}]