实例讲解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实现对指定字符串补足固定长度倍数截断输出的方法
Nov 15 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
Python类中self参数用法详解
Feb 13 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
基于FME使用Python过程图解
May 13 Python
用python写PDF转换器的实现
Oct 29 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
Python破解极验滑动验证码详细步骤
May 21 Python
python读取mnist数据集方法案例详解
Sep 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解析URL函数parse_url和parse_str
2014/11/11 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
PHP反射学习入门示例
2019/06/14 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
js数组去重的方法总结
2019/01/18 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python开发利器之ulipad的使用实践
2017/03/16 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
优秀驾驶员先进事迹材料
2014/05/04 职场文书
跳槽求职信范文
2014/05/26 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
法定授权委托证明书
2015/06/18 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript
深入理解redis中multi与pipeline
2021/06/02 Redis