python之序列化反序列化

serialization序列化

    将内存中对象存储下来,把它变成一个个字节

deserialization反序列化

    将文件的一个个字节恢复成内存中对象。

序列化保存到文件就是持久化。可以将数据序列化后持久化,或者网络传输;也可以将从文件中或者网络接收到的字节序列反序列化。

python提供了pickle库。


dumps:对象序列化

dump对象序列化到文件对象,就是存入文件;

loads:对象反序列化

load对象反序列化,从文件读取数据;

import pickle


class AA:
    def show(self):
        print('abc')
        a = 'abcdefghigklmn'
        print(a)

aa = AA()


with open('bin', 'wb') as f:
    pickle.dump(aa, f)

with open('bin', 'rb') as f:
    tmp = pickle.load(f)
    print(tmp)
    tmp.show()

上面的实例中,其实就保存一个类名,因为所有的其他东西都是类定义的东西,是不变的,所以只序列化一个AA类名。反序列化的时候找到类就可以恢复一个对象。

with open('bin', 'rb') as f:
    tmp = pickle.load(f)
    print(tmp)
    tmp.show()
    
AttributeError: Can't get attribute 'AA' on <module '__main__' from 'pic.py'>

上面这样会抛出异常;

class AA:
    def show(self):
        print(123)

aa = AA()
with open('bin', 'rb') as f:
    tmp = pickle.load(f)
    print(tmp)
    tmp.show()

反序列化的时候要找到AA类的定义,才能成功。增加定义类即可解决。哪怕这个AA类不一样。


本地序列化的情况,应用较少;

一般来说,大多数场景都应用在网络中。将数据序列化后通过网络传输到远程节点,远程服务器上的服务将收到的数据反序列化后,就可以使用了。

但是要注意一点,远程接收端,反序列化时候必须有对应的数据类型,否则就会报错。尤其是自定义类,必须远程得有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值