实例讲解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画图学习入门教程
Jul 01 Python
python中安装模块包版本冲突问题的解决
May 02 Python
python 输出上个月的月末日期实例
Apr 11 Python
python try except 捕获所有异常的实例
Oct 18 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
用python解压分析jar包实例
Jan 16 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python趣味挑战之实现简易版音乐播放器
May 28 Python
Python实现对齐打印 format函数的用法
Apr 28 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
详解Python3 pandas.merge用法
2019/09/05 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python随机模块random使用方法详解
2020/02/14 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Python ellipsis 的用法详解
2020/11/20 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
升国旗仪式主持词
2014/03/19 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
2019广播稿怎么写
2019/04/17 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python