Python序列化和反序列化,python中序列化和反序列化
Python的序列化是将变量从内存改为存储或传输的过程,而反序列化是将变量从序列化对象重新读入内存的过程。方法是:1、导入泡菜模块;2.使用pickle中的loads或load函数进行反序列化。
我们把变量从内存中变成可存储或传输的过程称之为序列化。
序列化后,序列化的内容可以写入磁盘或通过网络传输到其他机器。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
举个例子:大家应该都玩过魔兽。要知道游戏是有存档功能的。我可以在每次不想玩的时候存档,然后再玩的时候,我们根本不需要重新开始玩。我们只需要阅读文件。我们现在学的是面向对象的思维,所以在我们眼里,无论是我们的游戏角色还是游戏中的怪物、装备等等,都可以一个一个的看成对象进行简单的分析。
角色对象(包括等级、性别、经验值、HP、MP等)
对象(包括武器类型,武器伤害,武器附加能力值等。)
怪物(包括等级、经验值、攻击、怪物类型等。)
所以玩游戏的过程变得很有趣。创建游戏角色就像创建角色对象一样。获得武器就像创建一个武器对象。你遇到的怪物,NPC之类的都是对象。
然后用学过的知识进行分析,我们发现对象的数据都存储在内存中。大家应该都知道,断电后内存中的数据会消失。但是,我们的游戏存档后,即使你关机几天再进入游戏,你可以读取你的存档,发现游戏里的一切都还在。很奇怪。很明显,内存里的数据没了。这是为什么呢?然后仔细考虑,用硬盘存储在电脑里的数据在断电后不会丢失(如果断电导致硬盘损坏,就没有数据了,哈哈,不考虑)。那么应该很容易认为这些数据是存在硬盘里的。没错!这就是对象的持久性,也就是我们今天要讲的对象的序列化。那么反序列化就很好理解了,就是把存储在硬盘里的信息读出来形成一个对象。
Pickle模块提供了四个功能:转储、转储、加载和加载。
转储和转储是序列化的,而加载和加载是反序列化的。
进口泡菜
[1,2,3,4]
泡菜。转储(d)
b \ X80 \ x03]q \ x00(k \ x01k \ x02k \ x03k \ x04e 转储将传递的变量的值序列化为一个字节,然后,该字节可以写入磁盘或传输。
转储则更到位。在dump中,可以传入两个参数,一个是要序列化的变量,一个是要写入的文件。
f=打开(文件测试, wb )
d=[1,2,3,4]
pickle.dump
f.close()
f=opem(文件测试,经常预算)
f=打开(文件测试, rb )
阅读()
b \ X80 \ x03]Q \ x00(K \ x01k \ x02k \ x03k \ x04e loads当我们想把一个对象从磁盘读入内存时,可以先把内容读入一个字节,然后用loads方法反序列化这个对象,或者直接用load方法反序列化一个文件。
d=[1,2,3,4]
r=pickle.dumps(d)
打印(r)
b \ X80 \ x03]q \ x00(K \ x01K \ x02K \ x03K \ x04e
酸洗负载(r)
[1,2,3,4]d=[1,2,3,4]
f=打开(文件测试, wb )
pickle.dump
f.close()
f=打开(文件测试, rb )
r=酸洗负荷(f)
f.close()
打印(r)
[1,2,3,4]推荐课程:Matplotlib图形绘制(科里斯查费)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。