实例讲解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 29 Python
Python解惑之True和False详解
Apr 24 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python使用requests发送POST请求实例代码
Jan 25 Python
Python3使用pandas模块读写excel操作示例
Jul 03 Python
python3 property装饰器实现原理与用法示例
May 15 Python
Python实现12306火车票抢票系统
Jul 04 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
python如何查看网页代码
Jun 07 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
python 发送邮件的四种方法汇总
Dec 02 Python
如何解决.cuda()加载用时很长的问题
May 24 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新手NOTICE错误常见解决方法
2011/12/07 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python与Redis的连接教程
2015/04/22 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
如何撰写岗位职责
2014/02/01 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
五年级语文教学反思
2016/03/03 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
在js中修改html body的样式
2021/11/11 Javascript
Pygame Draw绘图函数的具体使用
2021/11/17 Python