python中的对象序列化

使用dumpload函数

foo='foo.txt'
mydict
={'user':'xmli','pass':'password'}
mylist
=['hello world',526]

from cPickle import dump,load

f
=file(foo,'wb')
dump(mydict,f,
2)
dump(mylist,f,
2)
f.close()

f
=file(foo,'rb')
mydict2
=load(f)
mylist2
=load(f)
f.close()

使用PicklerUnpickler

foo='foo.txt'
mydict
={'user':'xmli','pass':'password'}
mylist
=['hello world',526]

from cPickle import Pickler,Unpickler

f
=file(foo,'wb')
pickler
=Pickler(f,2)
pickler.dump(mydict)
pickler.dump(mylist)
f.close()

f
=file(foo,'rb')
unpickler
=Unpickler(f)
mydict2
=unpickler.load()

注意事项:

Ø         使用cPickle模块而不是pickle模块,是因为cPickle要比pickle模块速度快近1000倍,并且它们的函数基本上是一样的。cPickle的缺点是不支持class的序列化。

Ø         Pickler构造函数的第二个参数是它使用的protocol,可取值012。默认值是0,以明文本方式记录;速度最快的是2 。当取值不为0时请注意使用binary方式来打开文件(PicklerUnpickler)。

Ø         cPickle模块直接提供了dumpload函数,可以方便的直接使用。优点是简单,缺点是不能很好的记录变量之间的关系。

Ø         注意最后不要忘了关闭文件对象。



posted @ 2007-03-24 16:50  李现民  阅读(2092)  评论(0编辑  收藏  举报