实例讲解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多重继承新算法C3介绍
Sep 28 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python可视化实现代码
Jan 15 Python
python文件写入write()的操作
May 14 Python
linux环境中没有网络怎么下载python
Jul 07 Python
python字符串判断密码强弱
Mar 18 Python
python多进程下的生产者和消费者模型
May 07 Python
Python函数参数定义及传递方式解析
Jun 10 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 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
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
python使用mysql数据库示例代码
2017/05/21 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
Python hashlib模块的使用示例
2020/10/09 Python
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
先进事迹报告会主持词
2014/04/02 职场文书
社区植树节活动总结
2015/02/06 职场文书
爱晚亭导游词
2015/02/09 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
企业宣传语大全
2015/07/13 职场文书
安全生产感想
2015/08/07 职场文书