yaml简介
YAML是一个可读性高,用来表达数据序列的格式。YAML引用了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式中获得灵感。目前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印除错内容、文件大纲。尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。由于YAML使用空白字符和分行来分隔数据,使得它特别适合用grep/Python/Perl/Ruby操作。其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构时会变得复杂而难以辨认。
yaml语法
关于yaml的具体语法,可以参考这篇博客http://www.ruanyifeng.com/blog/2016/07/yaml.html,这里不再赘述
python解析yaml文件
下面来看两个例子看python如何load和dump yaml文件。
1. 解析yaml文件
假设我们有如下yaml文件
# test.yaml
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name1: Jenny Smith
age1: 12
可以使用yaml.load将文件解析成一个字典
import yaml
with open('test.yaml','r') as f:
data = yaml.load(f)
print(type(data))
print(data)
'''
输出结果
<type 'dict'>
{'age': 37, 'spouse': {'age': 25, 'name': 'Jane Smith'}, 'children': [{'age': 15, 'name': 'Jimmy Smith'}, {'age1': 12, 'name1': 'Jenny Smith'}]}
'''
2. 将字典写入yaml文件中
import yaml
data = {'name':'johnson', 'age':23,
'spouse':{'name':'Hallie', 'age':23},
'children':[{'name':'Jack', 'age':2}, {'name':'Linda', 'age':2}]}
with open('test2.yaml','w') as f:
f.write(yaml.dump(data))
print yaml.dump(data)
'''
输出结果:
age: 23
children:
- {age: 2, name: Jack}
- {age: 2, name: Linda}
name: johnson
spouse: {age: 23, name: Hallie}
'''
得到的yaml文件如下所示:
# test2.yaml
age: 23
children:
- {age: 2, name: Jack}
- {age: 2, name: Linda}
name: johnson
spouse: {age: 23, name: Hallie}