实例讲解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中的decode()方法的使用
May 18 Python
python实现的系统实用log类实例
Jun 30 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Python科学计算之NumPy入门教程
Jan 15 Python
python对excel文档去重及求和的实例
Apr 18 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
解决python 读取 log日志的编码问题
Dec 24 Python
python爬虫实例之获取动漫截图
May 31 Python
python hmac模块验证客户端的合法性
Nov 07 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编写的SVN类
2013/07/18 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
零基础php编程好学吗
2019/10/11 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
Python字符串处理之count()方法的使用
2015/05/18 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
python开发之thread线程基础实例入门
2015/11/11 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python中的asyncio代码详解
2019/06/10 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
民族学专业求职信
2014/07/28 职场文书
爱心助学感谢信
2015/01/21 职场文书
大国崛起日本观后感
2015/06/02 职场文书
宾馆安全管理制度
2015/08/06 职场文书
学前班教学反思
2016/02/24 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
详解CSS3浏览器兼容
2022/12/24 HTML / CSS