- YAML的可读性好。
- YAML和脚本语言的交互性好。
- YAML使用实现语言的数据类型。
- YAML有一个一致的信息模型。
- YAML易于实现。
上面5条也就是XML不足的地方。同时,YAML也有XML的下列优点:
- YAML可以基于流来处理;
- YAML表达能力强,扩展性好。
总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。
更多的内容及规范参见http://www.yaml.org。
语法
Structure通过空格来展示。Sequence里的项用"-"来代表,Map里的键值对用":"分隔.
这几乎就是所有的语法了.
注意在YAML中,字串不一定要用双引号标示。另外,在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了(不过不能使用TAB字符)。
比如……
一般YAML文件扩展名为.yaml。比如:John.yaml
如何写yaml?
name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 children: - name: Jimmy Smith age: 15 - name1: Jenny Smith age1: 12
John今年37岁,有一个幸福的四口之家。两个孩子Jimmy 和Jenny活泼可爱。妻子Jane年轻美貌。
如果深入研究的话还可能发现一些社会问题。
可见YAML的可读性是不错。
http://pyyaml.org/wiki/PyYAMLDocumentation
yaml在python上的具体实现:PyYaml
将yaml写成配置脚本test.yaml ,以下介绍如何读写yaml配置。
使用python的yaml库PyYAML。http://pyyaml.org/
安装到python lib下后就可以正常使用了。
或者在C:/python 下,用命令行 pip install pyyaml
- #
tree format - treeroot:
-
branch1: -
name: Node 1 -
branch1-1: -
name: Node 1-1 -
branch2: -
name: Node 2 -
branch2-1: -
name: Node 2-1
- import
yaml - f
= open('d:/tree.yml') - dataMap
= yaml.load(f) - f.close()
-
- #下面是 print
dataMap的结果 - {'treeroot':
{'branch1': {'branch1-1': {'name': 'Node 1-1'}, -
'name': 'Node 1'}, -
'branch2': {'branch2-1': {'name': 'Node 2-1'}, -
'name': 'Node 2'}}}
- import
yaml - f
= open('d:/newtree.yaml', "w") - yaml.dump(dataMap,
f) - f.close()
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口,
pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
import pickle
data1 = {'a': [1, 2.0, 3, 8],
selfref_list = [1, 2, 3]
#selfref_list.append(selfref_list)
output = open('D:/data.pkl', 'wb')
# Pickle dictionary using protocol 0.
pickle.dump(data1, output)
# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)
output.close()