Pickle模块用来对Python对象执行序列化和反序列化。Python的任何对象都可以通过它永久保存到硬盘文件。Pickle实际上是先把Python对象(list、dict、class等)转换为字符流,这个字符流包含反序列化(从字符流构建对象)所需的所有数据。
No More Bullshit!
首先导入pickle模块:
import pickle
pickle有两个主要方法。第一个是dump-把对象导入到文件;第二个是load-从文件中加载对象。
示例:
import pickle
l1 = ['data1','data2','data3', 'data4']
file = open("testfile",'wb')
# 把l1保存到文件
pickle.dump(l1, file)
file.close()
####################################
file = open("testfile",'r')
# 从文件中加载保存的对象
l2 = pickle.load(file)
print(l2)
print(l1 == l2)
输出:
你可以看一下testfile文件中的内容,里面是可读的文件(不是二进制流)。
$ cat testfile
(lp0
S'data1'
p1
aS'data2'
p2
aS'data3'
p3
aS'data4'
p4
pickle用法总结:
把程序执行状态保存到文件,在下次启动程序时恢复到退出时的状态。
在分布式系统中通过TCP连接发送数据。
在数据库中存储Python对象
把不可读的Python对象转为字符串,可以用来做字典的key(可以用来做缓存)。
有一点需要注意,pickle还有一个c版本cpickle,它的执行效率是pickle的1000倍。
为了兼容,导入方法如下:
try:
import cPickle as pickle
except ImportError:
import pickle
虽然cpickle效率比较高,但是不建议使用,因为:
pickle可以处理unicode对象
pickle是纯Python写的,调试简单