配置文件語言之yaml

一. Yamlpython

YAML 是一種簡潔的非標記語言。YAML以數據爲中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。web

因爲實現簡單,解析成本很低,YAML特別適合在腳本語言中使用。列一下現有的語言實現:Ruby,Java,Perl,Python,PHP,JavaScript等。數組

YAML 是專門用來寫配置文件的語言,很是簡潔和強大,遠比 JSON 格式方便。好比同一段數據Josn和Yaml的表示分別以下:數據結構

Json
{ name: 'Tom Smith',age: 37,spouse: { name: 'Jane Smith', age: 25 },children: [ { name: 'Jimmy Smith', age: 15 },{ name: 'Jenny Smith', age: 12 } ] }
yaml

name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name: Jenny Smith
   age: 12

清晰明瞭程度一會兒就看出來了吧。app

語法特色

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不容許使用Tab鍵,只容許使用空格。
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊便可

yaml下載安裝

pip install yaml

yaml數據類型詳解

支持數據類型

  1. 純量(scalars):單個的、不可再分的值
  2. 數組:一組按次序排列的值,又稱爲序列(sequence) / 列表(list)
  3. 對象:鍵值對的集合,又稱爲映射(mapping)/ 哈希(hashes) / 字典(dictionary)

純量

數據最小的單位,不能夠再分割。相似於Python中單個變量ide

flag

list數組

與Python的list數組結構相似,數組元素使用「-」開頭,也能夠根據縮進進行數組嵌套。url

- Jack
- Harry
- Sunny
 
# 也能夠寫成一行
[Jack,Harry,Sunny]

對應到python的list寫法以下:spa

['Jack','Harry','Sunny']

對象

對象的一組鍵值對,使用冒號結構表示。相似Python中的字典數據結構。scala

platformName: Android
platformVersion: 6.0.1

# Yaml 也容許另外一種寫法,將全部鍵值對寫成一個行內對象。
{platformName: Android,platformVersion: 6.0.1}
注意:冒號後面必定要有空格!對應到python字典的寫法以下:
{'platformName': 'Android', 'platformVersion': '6.0.1'}

數據嵌套

yaml數據嵌套表示能夠將上面的各種數據根據實際場景進行組合嵌套。3d

數據場景

Tom Smith 37歲,他有一個妻子叫 Jane Smith,25歲。 另外他有2個孩子,一個叫Jimmy Smith,15歲;另一個叫Jenny Smith ,12歲。

yaml語法表示以下:

name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name: Jenny Smith
   age: 12
familyInfo.yaml

轉化爲Python的寫法爲:

{'name':'Tom Smith','age':37,'spouse':{'name':'Jane Smith','age':25},'childern':[{'name':'Jimmy Smith','age':15},{'name':'Jenny Smith','age':12}]}

yaml數據操做

數據讀取:load()方法

load(stream, Loader=Loader) 解析文件流中的第一個YAML文檔並生成相應的Python對象。

代碼實現
# 讀取familyinfo.yaml文件的數據
import yaml

file = open('familyinfo.yaml', 'r')
data = yaml.load(file)

# 打印全量data數據
print(data)

# 獲取配偶信息
print(data['spouse'])

# 分別獲取配偶的姓名和年齡
print(data['spouse']['name'])
print(data['spouse']['age'])

# 獲取全部孩子的信息
print(data['children'])

# 分別獲取每一個孩子的信息
print(data['children'][0])
print(data['children'][0]['name'])
print(data['children'][0]['age'])

print(data['children'][1])
print(data['children'][1]['name'])
print(data['children'][1]['age'])

# 修改Tom Smith的名字,可是不寫入yaml文件
data['name'] = 'Ma Mingchen'
print(data['name'])

# 修改第一個孩子的名字
data['children'][0]['name']='Ma Yuhe'
print(data['children'][0]['name'])
yaml_load.py

數據轉化

方法:dump()能夠將Python對象序列化成YAML流。若是stream爲None,則返回生成的字符串。

將下面python數據類型轉化爲yaml數據類型

slogan=['welcome','to','BeiJing']
website={'url':'www.baidu.com'}
代碼實現
import yaml


# 將下面python數據類型轉化爲yaml數據類型
slogan=['welcome','to','BeiJing']
website={'url':'www.baidu.com'}

print(slogan)
print(website)

# 將python數據類型轉換爲yaml流
print(yaml.dump(slogan))
print(yaml.dump(website))
yaml_dump.py
相關文章
相關標籤/搜索