实例讲解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服务器拒绝服务攻击代码
Jan 16 Python
跟老齐学Python之坑爹的字符编码
Sep 28 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
用Python shell简化开发
Aug 08 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
Python装饰器用法与知识点小结
Mar 09 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 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
PHP生成静态页面详解
2006/12/05 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php生出随机字符串
2017/07/06 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
用原生JS对AJAX做简单封装的实例代码
2016/07/13 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python3基础之函数用法
2014/08/13 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
小学毕业典礼主持词
2014/03/27 职场文书
班主任班级寄语大全
2014/04/04 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
入党介绍人意见2015
2015/06/01 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书