建议44:理解模块pickle优劣

# -*-  coding:utf-8 -*-
'''
pickle 估计是最通用的序列化模块了,它还有个C 语言的实现cPickle,相比pickle 来说
具有较好的性能,其速度大概是pickle 的1000 倍,因此在大多数应用程序中应该优先使用
cPickle(注:cPickle 除了不能被继承之外,它们两者的使用基本上区别不大,除有特殊情况,
本节将不再做具体区分)。pickle 中最主要的两个函数对为dump() 和load(),分别用来进行对
象的序列化和反序列化。

‰pickle.dump(obj, file[, protocol]) :序列化数据到一个文件描述符(一个打开的文件、
套接字等)。参数obj 表示需要序列化的对象,包括布尔、数字、字符串、字节数组、
None、列表、元组、字典和集合等基本数据类型,此外picike 还能够处理循环,递归
引用对象、类、函数以及类的实例等。参数file 支持write() 方法的文件句柄,可以为
真实的文件,也可以是StringIO 对象等。protocol 为序列化使用的协议版本,0 表示
ASCII 协议,所序列化的对象使用可打印的ASCII 码表示;1 表示老式的二进制协议;
2 表示2.3 版本引入的新二进制协议,比以前的更高效。其中协议0 和1 兼容老版本
的Python。protocol 默认值为0。

‰load(file):表示把文件中的对象恢复为原来的对象,这个过程也被称为反序列化。
  来看一下load() 和dump() 的示例。

'''
import cPickle as pickle
my_data = {"name" : "Python", "type" : "Language", "version" : "2.7.5"}
fp = open("picklefile.dat", "wb")  # 打开要写入的文件
pickle.dump(my_data, fp)           # 使用dump 进行序列化
fp.close()

fp = open("picklefile.dat", "rb")
out = pickle.load(fp) # 反序列化

fp.close()

#通用做法如下
with open("picklefile.dat", "rb") as fp:
    try:
        lastfileList = pickle.load(fp)
    except EOFError:
        print "Load (filename) was failed"%{'filename':'picklefile.dat'}
原文地址:https://www.cnblogs.com/tychyg/p/4935949.html