反序列化(unpickling):相应的,把变量的内容从序列化的对象重新读到内存里的过程称为反序列化;
使用的时候,一般先尝试导入cPickle,如果失败,再导入pickle模块。
try:
import cPickle as pickle
except ImportError:
import pickle
所有Python支持的 原生类型 : 布尔, 整数, 浮点数, 复数, 字符串, bytes(字节串)对象, 字节数组, 以及 None.
–由任何原生类型组成的列表,元组,字典
–由任何原生类型组成的列表,元组,字典和集合组成的列表,元组,字典和集合(可以一直嵌套下去,直至Python支持的最大递归层数).
–函数,类,和类的实例(带警告)。
pickle模块中主要的函数是dump()/load()和dumps()/loads()。
dump()实现把一个对象序列化之后以特定的格式保存到指定的文件中,dumps()实现把一个对象转化为序列化之后的str数据,然后可以对这个str数据进行其他处理或者把这个str数据写入文件;
load()实现把一个已经序列化并写入文本中的对象反序列化成内存中的对象,loads()实现把一个反序列化的str对象反序列化成内存中的对象。
dir = {bird:0,pig:1,cat:2,dog:3}
f = open('animal.pkl','wb')
pickle.dump(dir,f)
f.close
在程序所在目录下生成animal.pkl文件,保存的是dir内存对象的序列化后的信息。
f = open('animal.pkl', 'rb')
d = pickle.load(f)
f.close()
print d
load()返回从加载的文件中反序列化出的对象,d中的内容就是dir中的内容。
dumps()/loads()用法:
dir = {'bird':0,'pig':1,'cat':2,'dog':3}
ds = pickle.dumps(dir)
print ds
ls = pickle.loads(ds)
print ls
ds中的内容就是dir序列化后的对象,ls中的内容就是ds反序列化之后的对象,ls跟dir保持一致。
dump()和load()函数的参数也可以合并写为pickle.dump(dir,open('animal.pkl','wb'))和pickle.load(open('animal.pkl', 'rb'))