python中的对象序列化
使用dump与load函数
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()
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()
使用Pickler与Unpickler类
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()
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,可取值0、1、2。默认值是0,以明文本方式记录;速度最快的是2 。当取值不为0时请注意使用binary方式来打开文件(Pickler与Unpickler)。
Ø
cPickle模块直接提供了dump与load函数,可以方便的直接使用。优点是简单,缺点是不能很好的记录变量之间的关系。
Ø
注意最后不要忘了关闭文件对象。