python版本:2.7.5
安裝方法:pip install PyYaml
“把變量寫進yaml做配置文件,然後python腳本從yaml文件裏面取到變量”的方法最近是在python編程裏比較流行的配置項方法。yaml更加易讀,而且通過縮進表示結構,這一點與python不謀而合。
Yaml有四個比較常用的用法,分別是load()、dump()、load_all()、dump_all()。這篇文章主要就是了解一下這四個方法。
首先我們先寫一個很簡單的test.py:
# -*- coding: utf-8 -*- #!/usr/bin/env python import yaml yaml_str = """ name: Gakki age: 29 job: Actress relationship: Wife """ aaa = yaml.load(yaml_str) print aaa
執行的話,看到的效果就是:
[root@paas-online-crs-001 chentest]# python test.py {'job': 'Actress', 'age': 29, 'relationship': 'Wife', 'name': 'Gakki'}
這個aaa的類型是一個字典(dict),如果要得到裏面那個"Gakki",那麼就是aaa['name']。通過load方法,一個字符串變成了一個字典。
現在把test.py換成如下:
# -*- coding: utf-8 -*- #!/usr/bin/env python import yaml yaml_dict = {"name": "Gakki", "age": 29, "job": "Actress", "relationship": "Wife" } aaa = yaml.dump(yaml_dict, default_flow_style=False) print aaa print (type(aaa))
執行後的效果如下:
[root@paas-online-crs-001 chentest]# python test.py age: 29 job: Actress name: Gakki relationship: Wife <type 'str'>
可見,通過dump方法,把一個dict變成了一個字符串。
現在寫一個配置文件,假如它叫test.yaml:
- Gakki - 29 - Actress - Wife
再來一個test.py,內容如下:
# -*- coding: utf-8 -*- #!/usr/bin/env python import yaml aaa = yaml.load(file('test.yaml', 'r')) print aaa print (type(aaa))
執行這個test.py:
[root@paas-online-crs-001 chentest]# python test.py ['Gakki', 29, 'Actress', 'Wife'] <type 'list'> #得到了一個列表
如果把那個test.yaml升級成字典和列表的混合結構,如下:
- name: Chris age: 29 job: OM Engineer - name: Gakki age: 29 job: Actress relationship: Wife
執行test.py的效果如下:
[root@paas-online-crs-001 chentest]# python test.py [{'job': 'OM Engineer', 'age': 29, 'name': 'Chris'}, {'job': 'Actress', 'age': 29, 'relationship': 'Wife', 'name': 'Gakki'}] <type 'list'>
既然獲得的結果是一個包含字典的列表,那麼如果要獲得“Gakki”就是aaa[1]['name']
如果想要複製和引用,那麼要用&和*,比如把test.yaml改成這樣:
name: &name Gakki wife: *name
執行test.py的效果如下:
[root@paas-online-crs-001 chentest]# python test.py {'name': 'Gakki', 'wife': 'Gakki'} <type 'dict'>
在同一個yaml文件中,可以用 ---
來分段,這樣可以將多個文檔寫在一個文件中:
--- name: Chris age: 29 job: OM Engineer --- name: Gakki age: 29 job: Actress relationship: Wife
在寫一個新的test.py如下:
# -*- coding: utf-8 -*- #!/usr/bin/env python import yaml ys = yaml.load_all(file('gakki.yaml', 'r')) #load_all() 方法會生成一個迭代器,可以用for輸出出來 for y in ys: print y
執行這個py的效果:
[root@paas-online-crs-001 chentest]# python test.py {'job': 'OM Engineer', 'age': 29, 'name': 'Chris'} {'job': 'Actress', 'age': 29, 'relationship': 'Wife', 'name': 'Gakki'}
參考文檔:https://huilansame.github.io/huilansame.github.io/archivers/recommond-case-file-type-yaml