Python序列化操作

把内存中的变量变成可存储或可传输的过程,称之为序列化。反过来,把变量内容从序列化的对象重新读取到内存,称为反序列化

在Python中提供了两个模块,cPickle和pickle来实现序列化。前者是由C语言编写的,效率比后者高很多,但两个模块的功能是一样的。一般编写程序的时候,采取的方案是先导入cPickle模块,如果此模块不存在,再导入pickle模块。如下:

try:
    import cPickle as pickle
except ImportError:
    import pickle

pickle实现序列化主要使用的是dumps方法或者dump方法。dumps方法可以将任意对象序列化成一个str,然后可以将这个str写入文件进行保存。在Pycharm测试如下:

d = dict(url='index.html', title='首页', content='内容')
print(pickle.dumps(d))

结果为:

b'\x80\x03}q\x00(X\x05\x00\x00\x00titleq\x01X\x06\x00\x00\x00\xe9\xa6\x96\xe9\xa1\xb5q\x02X\x03\x00\x00\x00urlq\x03X\n\x00\x00\x00index.htmlq\x04X\x07\x00\x00\x00contentq\x05X\x06\x00\x00\x00\xe5\x86\x85\xe5\xae\xb9q\x06u.' 

如果使用dump方法,可以将序列化后的对象直接写入文件中。

f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()

pickle实现反序列化使用的是loads方法或load方法。把序列化后的文件从磁盘上读取为一个str。然后使用loads方法将这个str反序列化为对象,或者直接使用load方法将文件直接反序列化为一个对象,如下:

f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
print(d)

 结果为:

{'url': 'index.html', 'content': '内容', 'title': '首页'}

通过反序列化,存储为文件的dict对象,又重新恢复出来,但是这个变量和原变量没有什么关系,只是内容一样。这就是序列化操作的整个过程。

  

posted @ 2018-02-26 12:13  林蓝丶  阅读(84)  评论(0)    收藏  举报