实例讲解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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
Django框架视图函数设计示例
Jul 29 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python实现微信表情包炸群功能
Jan 28 Python
python高温预警数据获取实例
Jul 23 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 curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP session 会话处理函数
2016/06/06 PHP
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
基于hashlib模块--加密(详解)
2017/06/21 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
Python线程之定位与销毁的实现
2019/02/17 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
毕业生简单求职信
2013/11/19 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
决心书标准格式
2014/03/11 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
会计实训报告范文
2014/11/04 职场文书
埃及王子观后感
2015/06/16 职场文书
房屋买卖定金协议书
2016/03/21 职场文书