python 中的ymal文件

来源:互联网 发布:蝴蝶犬好养吗 知乎 编辑:程序博客网 时间:2024/06/05 21:36

YAML的适用范围
由于实现简单,解析成本很低,YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是脚本语言.
YAML比较适合做序列化。因为它是宿主语言数据类型直转的。
YAML做配置文件也不错。比如Ruby on Rails的配置就选用的YAML。对ROR而言,这很自然,也很省事.
由于兼容性问题,不同语言间的数据流转建议现在不要用YAML.
YAML存在的意义
无论多么完美的事物,都需要有对立面,有说“NO”的声音。XML也不例外。当然,站在主流的对立面,需要勇气和智慧。
YAML和XML不同,没有自己的数据类型的定义,而是使用实现语言的数据类型。这一点,有可能是出奇制胜的地方,也可能是一个败笔。如果兼容性保证的不好的话,YAML数据在不同语言间流转会有问题。如果兼容性好的话,YAML就会成为不同语言间数据流通的桥梁。建议yaml.org设立兼容认证 机制,每个语言的实现必须通过认证。
假如兼容性没问题的话,YAML就太完美了。轻巧,敏捷,高效,简便,通用。这才是理想中的数据模型。当然就现在而言,这还只是个理想。

 

 

 


本文的主题是用python使用yaml,那么我们来看看python中的序列化模块

模块名
 简介
 
Pickle
 可以选择性地把串行化对象保存为一个文件
 
cPickle
 比Pickle快,不支持Pickler和unPickler
 
Shelve
 构建在Pickle和anydbm上,类似字典功能
 

当然还有其他很多:pprint,marshal,zodb…
 
进入正题yaml
 
下载和安装pyYaml
pyYaml下载地址:http://pyyaml.org/wiki/PyYAML
按照你的操作系统和python下载对应的版本,我的window & python2.5
所以下载http://pyyaml.org/download/pyyaml/PyYAML-3.05.win32-py2.5.exe (for Python 2.5)

安装很容易,一路next.

 
详细说明(里面有很多的使用例子):http://pyyaml.org/wiki/PyYAMLDocumentation
下面只介绍一下简单的使用
<!--[if !supportLists]-->1)  <!--[endif]-->生成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
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的注释没有黏贴出来。

 

 

 

 

 

<!--[if !supportLists]-->2)  <!--[endif]-->读取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
 
!!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/module:package.module
 package.module
 
!!python/object:module.cls
 module.cls
 
!!python/object/new:module.cls
 module.cls
 
!!python/object/apply:module.f
 value
 

 
关于这些标签的具体使用可以参考
http://pyyaml.org/wiki/PyYAMLDocumentation

 
虽然本人也只是刚刚开始学python,但是我觉得网上的介绍yaml的python中文入门资料太少,所以才显了一下丑。

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiao_qiang_/archive/2008/09/06/2891119.aspx

原创粉丝点击