打赏

星辰大海ゞ

That which does not kill us makes us stronger!

导航

YAML描述与Python的对应关系

YAML是"YAML Ain't a Markup Language"的首字母缩写,其语法简单,结构通过空格来展示,(列表)项目使用"-"来代表,(字典)键值对使用":"分割

YAML使用一个固定的缩进风格表示数据层级结构关系。需要每个缩进级别由空格组成。注意:不要使用tabs.

最常见的是映射到Python中的列表(list)、字典(Dictionary)两种对象类型。

一、Ansible相关

1、块序列描述

块序列就是将描述的元素序列到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']]

2、块映射描述

块映射就是将描述的元素序列到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':10,'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}}]

 

二、Salt相关

1、冒号  需要注意的是冒号后面都有一个空格

字典的key在YAML中的表现形式是一个以冒号结尾的字符串:

my_key:  my_value

在Python中,命令将映射为:

{ 'my_key':  'my_value'}

另一种选择是,value可以通过缩进与key联接。当然了也可以进行嵌套使用。

my_key:

        my_value

2、短横杠

想要表示列表项,使用一个短横杠加一个空格 。

- list_value_one

- list_value_two

- list_value_three

列表可以作为一个键值对的value,这在salt中很常见,比如我们要一次性安装多个软件包:

my_dictionary:

    - list_value_one

    - list_value_two

    - list_value_three

在Python中,上面的代码将映射为:

{ 'my_dictionary': ['list_value_one', 'list_value_two', 'list_value_three']}

 

posted on 2015-12-03 09:52  星辰大海ゞ  阅读(697)  评论(0编辑  收藏  举报