python 中的pickle库
序列化:我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反序列化:
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
Python提供两个模块来实现序列化:cPickle
和pickle
。这两个模块功能是一样的,区别在于cPickle
是C语言写的,速度快,pickle
是纯Python写的,速度慢,跟cStringIO
和StringIO
一个道理。用的时候,先尝试导入cPickle
,如果失败,再导入pickle
:
try:import cPickle as pickle
except ImportError:import pickle
首先,我们尝试把一个对象序列化并写入文件:
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
"(dp0\nS'age'\np1\nI20\nsS'score'\np2\nI88\nsS'name'\np3\nS'Bob'\np4\ns."
pickle.dumps()
方法把任意对象序列化成一个str,然后,就可以把这个str写入文件。
或者用另一个方法pickle.dump()
直接把对象序列化后写入一个file-like Object:
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
看看写入的dump.txt
文件,一堆乱七八糟的内容,这些都是Python保存的对象内部信息。
当我们要把对象从磁盘读到内存时,可以先把内容读到一个str
,然后用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保存那些不重要的数据,不能成功地反序列化也没关系。
别的方法:
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
参考我的另一篇文章,《python中的json序列化》
参考:
(1)、https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138683221577998e407bb309542d9b6a68d9276bc3dbe000
(2)、https://www.cnblogs.com/abobo/p/8080447.html
python 中的pickle库相关推荐
- Python中使用pickle库进行数据的序列化存储
学习python的话,是不是有时候需要在本地存储一些数据,今天为大家来介绍一种新的实现方式:那就是使用python自带的pickle库. 先上一段代码来看一下pickle的基本使用: import p ...
- python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码
python中nlp的库 by Praveen Dubey 通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag ...
- python中的迭代库
python中的迭代库为itertools,如果需要输出详细,需要使用类型工厂函数,如list,tuple将结果转换 itertools.product:product(A,B) 相当于((x, y) ...
- python中调用c库
python中调用c库 2013-04-23 15:34:52| 分类: python核心编程 | 标签:python makefile |举报 |字号 订阅 参考地址:http://my. ...
- Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...
Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...
- python中nlp的库_用于nlp的python中的网站数据清理
python中nlp的库 The most important step of any data-driven project is obtaining quality data. Without t ...
- 利用python中的csv库读写csv文件
利用python中的csv库读写csv文件 python读写csv文件就我知道的方法有:1)利用csv库,2)利用读写txt文件的方式处理,3)利用numpy或pandas库处理 在这篇博客中,博主就 ...
- 用python中的turtle库绘制一些有趣的图
最近有个在读大学的女生,想要我帮忙用python画几个图,在画的过程中觉得有些图还挺有意思的,分享给大家. 1 图1 第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtl ...
- python中的sheet,Python中的Smartsheet库:模块'smartsheet.sheets'没有属性'sheets'
我正在尝试在python中使用smartsheet库. 使用'$ pip install smartsheet-python-sdk'完成pip安装. 我使用以下代码在令牌上进行了测试. import ...
最新文章
- Spoooooky CSS 选择器
- Premiere做影片时四周的黑框
- jquery ajax返回Internal server error 500错误解决方案
- Serverless的4种错误打开方式
- BigInteger用法-Java大数据存储、运算
- YbOJ-网格序列【拉格朗日插值】
- 真正的模块化Web应用程序:为什么没有开发标准?
- 【论文笔记】node2vec:可扩展的网络特征学习
- XenCenter 创建 New VM
- linux 网桥端口,linux网桥
- 快来,别人不知道的秘密,QQ空间视频下载教程
- 《机器学习实战》第三章:决策树(3)测试、存储、实例
- excel表格两个表格合并
- android第三方应用商店,Android第三方应用商店成长迅猛
- 带你走进开源阿卡信-v1.0
- 两地三中心是什么意思
- ERP是什么?能做什么?
- 最新调研-电子邮件归档解决方案行业研究分析报告
- Leetcode 1011. Capacity To Ship Packages Within D Days 在 D 天内送达包裹的能力
- springboot毕设项目小区停车场管理系统zvzay(1)(java+VUE+Mybatis+Maven+Mysql)
热门文章
- java utf 8 转unicode_java 在Unicode和UTF-8之间转换
- html细边框表格代码,html中表格细边框的四种实现及其比较.doc
- textedit怎么插入数据_还在手动插入Excel交叉空白行?这个小技巧10秒搞定
- perl与php,perl与php之异同
- java类什么时候卸载_java – Android:什么时候类被系统卸载?
- String.slice
- 【Canal源码分析】Sink及Store工作过程
- HttpRequest 类
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
- 一个App完成入门篇(五)- 完成新闻页面