实例讲解python中的序列化知识点


Posted in Python onOctober 08, 2018

在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict:

d = dict(name='Bob', age=20, score=88)

可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'。

我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

Python提供了pickle模块来实现序列化。

首先,我们尝试把一个对象序列化并写入文件:

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'

pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()

看看写入的dump.txt文件,一堆乱七八糟的内容,这些都是Python保存的对象内部信息。

当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象。我们打开另一个Python命令行来反序列化刚才保存的对象:

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

变量的内容又回来了!

当然,这个变量和原来的变量是完全不相干的对象,它们只是内容相同而已。

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了python序列化的相关知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松。

Python 相关文章推荐
让python json encode datetime类型
Dec 28 Python
Python获取系统默认字符编码的方法
Jun 04 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
JS设计模式之责任链模式实例详解
Feb 03 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
pycharm安装和首次使用教程
Aug 27 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
Python PIL图片添加字体的例子
Aug 22 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
Python接收手机短信的代码整理
Aug 02 Python
python多线程方法详解
Jan 18 Python
实例讲解python中的协程
Oct 08 #Python
详解python分布式进程
Oct 08 #Python
python中多个装饰器的执行顺序详解
Oct 08 #Python
使用EduBlock轻松学习Python编程
Oct 08 #Python
Django forms组件的使用教程
Oct 08 #Python
详解关于Django中ORM数据库迁移的配置
Oct 08 #Python
面向初学者的Python编辑器Mu
Oct 08 #Python
You might like
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
js常用DOM方法详解
2017/02/04 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
Vue实现购物车详情页面的方法
2019/08/20 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
NestJs使用Mongoose对MongoDB操作的方法
2021/02/22 Javascript
[03:03]2014DOTA2西雅图国际邀请赛 Alliance战队巡礼
2014/07/07 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
详解Django中Request对象的相关用法
2015/07/17 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
python 实现UTC时间加减的方法
2018/12/31 Python
使用APScheduler3.0.1 实现定时任务的方法
2019/07/22 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
大专毕业生自我鉴定
2013/11/21 职场文书
学术会议邀请函
2015/01/30 职场文书
新教师教学工作总结
2015/08/14 职场文书
防震减灾主题班会
2015/08/14 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL