13.python笔记之pyyaml模块

时间:2021-10-14 00:36:04

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()

完毕!