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函数,可以方便的直接使用。优点是简单,缺点是不能很好的记录变量之间的关系。

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



你可能感兴趣的:(python)