在python中使用Yaml
引用www.ibm/developerworks/cn/xml/x-cn-yamlintro/的介绍
YAML的适用范围
由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言.
YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.
由于兼容性问题,不同语言间的数据流转建议现在不要用YAML.
YAML存在的意义
python入门教程非常详细word
无论多么完美的事物,都需要有对立面,有说“NO”的声音。XML也不例外。当然,站在主流的对立面,需要勇气和智慧。
YAML和XML不同,没有自己的数据类型的定义,而是使用实现语言的数据类型。这一点,有可能是出奇制胜的地方,也可能是一个败笔。如果兼容性保 证的不好的话,YAML数据在不同语言间流转会有问题。如果兼容性好的话,YAML就会成为不同语言间数据流通的桥梁。建议设立兼容认证 机制,每个语言的实现必须通过认证。
假如兼容性没问题的话,YAML就太完美了。轻巧,敏捷,高效,简便,通用。这才是理想中的数据模型。当然就现在而言,这还只是个理想。
本文的主题是用python使用yaml,那么我们来看看python中的序列化模块
模块名
简介
Pickle
可以选择性地把串行化对象保存为一个文件
cPickle
Pickle快,不支持Pickler和unPickler
Shelve
构建在Pickle和anydbm上,类似字典功能
当然还有其他很多:pprint,marshal,zodb…
进入正题yaml
下载和安装pyYaml
pyYaml下载地址:
按照你的操作系统和python下载对应的版本,我的window & python2.5
所以下载 (for Python 2.5)
安装很容易,一路next.
详细说明(里面有很多的使用例子):Documentation
下面只介绍一下简单的使用
1)  生成yaml文件
1.import yaml
2.
3.document = """
4.name: Vorlin Laruknuzum
5.sex: Male
6.class: Priest
7.title: Acolyte
8.hp: [32, 71]
9.sp: [1, 13]
10.gold: 423
11.inventory:
12.- a Holy Book of Prayers (Words of Wisdom)
13.- an Azure Potion of Cure Light Wounds
oracle11g新特性14.- a Silver Wand of Wonder
15."""
16.print  yaml.dump(yaml.load(document))
17.#打印由字符转换成python对象的yaml格式信息
18.
19.stream = file('document.yaml', 'w')
20.yaml.dump(yaml.load(document), stream)
21.#写文件    # Write a YAML representation of data to 'document.yaml'.
22.print yaml.dump(yaml.load(document)) 
在这里发现一个蛮有意思的现象,我是用eclipse的dvpy插件的,从代码中拷贝代码出来黏贴到word中的时候,发现python的注释没有黏贴出来。
2)  读取yaml文件
据说:yaml.load is as powerful as pickle.  这是官方的说法,我们就相信他吧。
1.stream = file('document.yaml', 'r')   
2.dict =  yaml.load(stream)
3.print dict
4.#打印所有的yaml数据,其实也就是dict类,《简明_python_教程》里说的字典
5.print dict["name"]
6.#打印其中的一个key值
7.
yaml.load的作用是把一个yaml格式的文档转换成python对象。
注:上面只是说yaml文件中的”name”正好是dict类的,所以可以这么取,并不是所有的都这么取,具体看他yaml的格式而定。
3)按照需要选择性地生成python对象
1.>>> class Hero:
2....     def __init__(self, name, hp, sp):
3....         self.name = name
4....         self.hp = hp
5....         self.sp = sp
6....     def __repr__(self):
7....         return "%s(name=%r, hp=%r, sp=%r)" % (
8....             self.__class__.__name__, self.name, self.hp, self.sp)
9.
10.>>> yaml.load("""
11.... !!python/object:__main__.Hero
12.... name: Welthyr Syxgon
13.... hp: 1200
14.... sp: 0
15.... """)
16.
这里是生成了一个Hero类,属性是name,hp,sp;他是添加了python/object标签,很聪明的一个想法!
YAML tags and Python types(yaml与python的标签对应关系表)
YAML tag
Python type
Standard YAML tags
 
!!null
None
!!bool
bool
viewsonic显示器是什么牌子
!!int
int
!!float
float实例化类的关键字
!!binary
str
!!timestamp
datetime.datetime
!!omap
!!pairs list of pairs
!!set
set
!!str
str
!!seq
list
!!map
dict
Python-specific tags
 
!!python/none
None
!!python/bool
bool
!!python/str
str
!!python/unicode
unicode
!!python/int
int
!!python/long
long
无主之地下载手机版
!!python/float
float
!!python/complex
complex
!!python/list
list
!!python/tuple
tuple
!!python/dict
dict
Complex Python tags
 
!!python/name:module.name
module.name
!!python/dule
dule
!!python/object:module.cls
module.cls
!!python/object/new:module.clsphp应用开发
module.cls
!!python/object/apply:module.f
value
关于这些标签的具体使用可以参考
Documentation
虽然本人也只是刚刚开始学python,但是我觉得网上的介绍yaml的python中文入门资料太少,所以才显了一下丑。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。