使用python的内置模块pickle可以将python中指定对象转化为文件保存在磁盘上,以后再取出读取。模块pickle的实质是python数据结构的序列化与反序列化。
如下所示,data是一个用来测试的python对象,内容随意;可通过pickle.dump
方法将data对象持久化到指定文件data.pkl中去。
import pickle data = { 'key1': [6,6,6], 'key2': ('zhuan', 'fou'), 'key3': True } file = open('data.pkl', 'wb') pickle.dump(data, file) # 将对象data持久化到file文件对象 file.close()
以后,要想再从data.pkl文件中读取出data对象,只需使用pickle模块来加载该文件即可:
import pickle file = open('data.pkl', 'rb') # 与pickle后的数据连接 data = pickle.load( file ) # 把它加载进一个变量 print data file.close()
实际应用中,有如下两点可进行优化:
基于上述两点,对代码进行优化,如下所示:
import cPickle as pickle data = { 'key1': [6,6,6], 'key2': ('zhuan', 'fou'), 'key3': True } file = open('data.pkl', 'wb') pickle.dump(data, file, True) # 第三个形参设成True获得更高压缩比 file.close()
从文件加载对象,只需换成cPickle模块,其余照旧:
import cPickle as pickle file = open('data.pkl', 'rb') # 与pickle后的数据连接 data = pickle.load( file ) # 把它加载进一个变量 print data file.close()
用纯文本来存储重要数据很容易遭到破坏和修改,pickle虽然对这类问题有效;但是pickle并不完美,依然有可能被破坏、修改、恶意利用。此外pickle不支持跨python版本,因此pickle持久化的对象并不适合公共使用。不过,pickle本身的定位也不在于此。
函数也是对象,也可以使用pickle进行对象持久化。