13.python笔记之pyyaml模块

Date:2016-03-25
Title:13.Python笔记之Pyymal模块使用
Tags:Python
Category:Python

博客地址:www.liuyao.me
作者:刘耀
YAML
YAML是一种用来表达数据序列的编程语言,它的主要特点包括:可读性强、语法简单明了、支持丰富的语言解析库、通用性强等。Ansible与Saltstack环境中配置文件都以YAML格式存在。下面是saltstack的配置:

file_roots: 
  base:  
   - /srv/salt/ 
 dev:
   - /srv/salt/dev  
 prod:  
   - /srv/salt

要通过YAML描述与Python的对应关系,从而方便读者了解YAML的层次及结构,最常见的是映射到Python中的列表(List)、字典(Dictionary)两种对象类型。下面通过块序列与块映射的示例详细说明。

1.块序列描述

块序列就是将描述的元素序列到Python的列表(List)中
例如:

#/!/usr/bin/env python
#__liuyao__
import yaml
data=yaml.load(""" 
  - one
  - two
  - three
  - four
""")
print (data)
用“-”来分隔列表中的每个元素,运行结果如下:
# python yamltest.py 
['one', 'two', 'three', 'four']

或者:

#/!/usr/bin/env python
#__liuyao__
import yaml
data=yaml.load(""" 
  -
   - one
   - two
   - three
   - four
  - 
   - list
   - dict
   - set
""")
print (data)
显示如下:
python yamltest.py 
[['one', 'two', 'three', 'four'], ['list', 'dict', 'set']]
#返回的是list类型

2.块映射描述

块映射就是将描述的元素序列到Python的字典(Dictio-nary)中,格式为“键(key):值(value)”。
例:

#/!/usr/bin/env python
#__liuyao__
import yaml
data=yaml.load(""" 
 hero:
   liuyao: 21
   mayun: 55
""")
print (type(data))
print (data)
结果:
<type 'dict'>
{'hero': {'liuyao': 21, 'mayun': 55}}

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

#注意空格和缩进
#/!/usr/bin/env python
#__liuyao__
import yaml
data=yaml.load(""" 
  - hero:
     liuyao: 21
     mayun: 55
  - name:
     liuyao:
        - 12
        - 33
""")
print (data)
结果:
[{'hero': {'liuyao': 21, 'mayun': 55}}, {'name': {'liuyao': [12, 33]}}]

例如:

新建install.yaml文件
输入一下内容
name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name1: Jenny Smith
   age1: 12
#yaml读
import yaml
with open('disk.sls')as f:
s=yaml.load(f)
print(s)
{'spouse': {'name': 'Jane Smith', 'age': 25}, 'name': 'Tom Smith', 'children': [{'name': 'Jimmy Smith', 'age': 15}, {'age1': 12, 'name1': 'Jenny Smith'}], 'age': 37}

将字符串转入yaml格式放入yaml文件

file='test.yaml'
data={'host': {'ip01': {'two': '192.168.1.254', 'one': '192.168.1.2'}, 'ip00': '192.168.1.1'}, 'soft': {'apache': 2.2, 'php': 5.3, 'mysql': 5.2}}
f=open(file,'w')
yaml.dump(data,f)
f.close()

完毕!

posted @ 2016-07-17 10:43  刘耀  阅读(4095)  评论(0编辑  收藏  举报