python的序列化是将变量从内存转换为可存储或传输的过程,反序列化是将变量内容从序列化对象重读到内存的过程。方法如下:1、导入pickle模块;2、使用pickle中的loads或load函数进行反序列化操作。
将变量从内存变为可存储或传输的过程称为序列化。
序列化后,可将序列化后的内容写入磁盘,或通过网络传输到其它机器。
另一方面,将变量内容从序列化的对象重读到内存中称为反序列化,即unpickling。
例如:我们都应该玩过魔兽争霸。我们应该知道游戏有一个存档功能。每次我不想玩的时候,我都可以存档,然后当我们再玩的时候,我们根本不需要重新开始玩。我们只需要阅读文件。在我们看来,无论是我们的游戏角色、游戏中的怪物、装备等,我们现在学到的都是面向对象的。 简单分析一个对象。
角色对象(包括等级、性别、经验值)HP、MP等属性)武器对象(包括武器类型、武器损伤、武器附加能力值等。)怪物对象(包括等级、经验值、攻击、怪物类型等。)所以玩游戏的过程变得非常有趣,创建游戏角色就像创建一个角色对象,得到武器就像创建一个武器对象,遇到怪物,NPC等。然后再用学 通过对知识的分析,我们发现对象的数据保存在内存中,我们都应该知道内存的数据在断电后会消失,但在我们的游戏归档后,即使你关闭了几天, 当你再次进入游戏时,读取你的存档,发现你在游戏中的一切仍然存在。奇怪的是,内存中的数据已经消失了。为什么?所以仔细想想,电脑里有硬盘。 断电后保存的数据不会丢失(如果断电导致硬盘损坏,没有数据,哈哈,这里就不考虑了)。所以很容易认为这些数据是保存在硬盘中的 了。没错!这就是对象的持久性,也就是我们今天要谈论的对象的序列化。所以反序列化很容易理解,就是读取存储在硬盘中的信息,形成对象。
pickle模块提供了四个功能:dumps、dump、loads、load。
dumps和dump是序列化的,loads和load是反序列化的。
>>>importpickle >>>d=[1,2,3,4] >>>pickle.dumps(d) b'\x80\x03]q\x00(Kx01K\x02K\x03K.'
dumps将传入的变量值序列化为bytes,然后将bytes写入磁盘或传输。
另一方面,dump可以在dump中输入两个参数,一个是需要序列化的变量,另一个是需要写入的文件。
f=open('file_test','wb') >>>d=[1,2,3,4] >>>pickle.dump(d,f) >>>f.close() >>>f=opem('file_test','rb') f=open('file_test','rb') >>>f.read() b'\x80\x03]q\x00(Kx01K\x02K\x03K.'
当我们想从磁盘读取对象的内存时,loads可以先读取bytes,然后用loads方法反序列化对象,也可以直接用load方法反序列化文件。
>>>d=[1,2,3,4] >>>r=pickle.dumps(d) >>>print(r) b'\x80\x03]q\x00(Kx01K\x02K\x03K.' >>>pickle.loads(r) [1,2,3,4]
>>>d=[1,2,3,4] >>>f=open('file_test','wb') >>>pickle.dump(d,f) >>>f.close() >>>f=open('file_test','rb') >>>r=pickle.load(f) >>>f.close() >>>print(r) [1,2,3,4]
推荐课程:Matplotlib图形绘制(Corey Schafer)