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

完畢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM