实例讲解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 30 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
Pillow图像处理库安装及使用
Apr 12 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
数字转英文
2006/12/06 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python 快速排序代码
2009/11/23 Python
利用python批量检查网站的可用性
2016/09/09 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
Python基于execjs运行js过程解析
2020/11/27 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
励志演讲稿500字
2014/08/21 职场文书
员工试用期自我鉴定范文
2014/09/15 职场文书
工作保证书怎么写
2015/02/28 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
清洁工工作总结
2015/08/11 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
Go gorilla securecookie库的安装使用详解
2022/08/14 Golang