内存中有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?这取决于你想要怎么保存、怎么重用、发送给谁。很多游戏允许你在退出时保存进度,然后你再次启动的时候回到上次退出的地方。(实际上,很多非游戏程序也会这么干。)在这个情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着你重新启动的时候从磁盘上加载进来。
Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
什么东西能用pickle模块存储?
--所有python支持的原生类型:布尔、整数、浮点数、复数、字符串、bytes(字节串)对象,字节数组,以及None
--由任何原生类型组成的列表、元组、字典
--由任何原生类型组成的列表、元组、字典和集合组成的列表、元组、字典和集合(可以一直嵌套下去,直至python支持的最大递归层数)
--函数、类和类的实例
d=[1,2,3,4,5,6]
f=file(‘test.txt‘,‘w‘)
f.write(d) // 只能将字符串写入,无法将列表、字典等类型写入文件中,这时使用pickle
f.close()
import pickle
account_info={‘123‘:[‘alex3721‘,125000,1233000],‘355‘:[‘rachel‘,9000,9000]}
f=file(‘account.pkl‘,‘wb‘)
pickle.dump(account_info,f) //把内存里的东西dump到磁盘
f.close()
##反序列化
f=open(‘account.pkl‘,‘rb‘)
account_info=pickle.load(f)
print account_info
#####
pickle account_info={:[,,],:[,,]} f=(,) pickle.dump(account_info,f) account_info[][]=pickle.dump(account_info,f) f.close() f=(,) ,acc1#保存了2次的状态,或者N次 acc2 f.close()