python之序列化反序列化
2020-07-02 17:21
1206 查看
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类不一样。
本地序列化的情况,应用较少;
一般来说,大多数场景都应用在网络中。将数据序列化后通过网络传输到远程节点,远程服务器上的服务将收到的数据反序列化后,就可以使用了。
但是要注意一点,远程接收端,反序列化时候必须有对应的数据类型,否则就会报错。尤其是自定义类,必须远程得有。
相关文章推荐
- Python 下载百度文库
- 二叉树 python
- 【流畅的python】笔记(P1序幕)自测知识点和书籍补充
- python一键安装多个库
- python 去除中文后附带的 \\x00
- python 中 list,numpy,tensor的互相转换
- 使用python计算方阵对角线之和之间的绝对差(HackerRank)
- 期末python作业
- 正则表达式在python中的简单使用(附带例子:正则表达式匹配+数据清洗)
- Python函数与模块(2)
- Python pip换源
- Python3.8场景式编程学习与训练- 第1章 入门基础 Python学习方法论与学习资源
- xcode配置Python开发环境
- 学习笔记-Python基础之6种内置对象
- 《用Python进行自然语言处理》笔记1
- 利用python爬虫爬取斗鱼图片(简单详细)
- Python基础第三节
- Python:开发环境搭建:Pycharm和Anaconda3的安装教程及环境配置
- python设计模式之代理模式
- 菜鸟初学python入门进阶第六节:面向对象,引用、可变性与垃圾回收