序列化:我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

反序列化:

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

Python提供两个模块来实现序列化:cPicklepickle。这两个模块功能是一样的,区别在于cPickle是C语言写的,速度快,pickle是纯Python写的,速度慢,跟cStringIOStringIO一个道理。用的时候,先尝试导入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库相关推荐

  1. Python中使用pickle库进行数据的序列化存储

    学习python的话,是不是有时候需要在本地存储一些数据,今天为大家来介绍一种新的实现方式:那就是使用python自带的pickle库. 先上一段代码来看一下pickle的基本使用: import p ...

  2. python中nlp的库_单词袋简介以及如何在Python for NLP中对其进行编码

    python中nlp的库 by Praveen Dubey 通过Praveen Dubey 单词词汇入门以及如何在Python中为NLP 编写代码的简介 (An introduction to Bag ...

  3. python中的迭代库

    python中的迭代库为itertools,如果需要输出详细,需要使用类型工厂函数,如list,tuple将结果转换 itertools.product:product(A,B) 相当于((x, y) ...

  4. python中调用c库

    python中调用c库 2013-04-23 15:34:52|  分类: python核心编程 |  标签:python  makefile   |举报 |字号 订阅 参考地址:http://my. ...

  5. Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...

    Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...

  6. python中nlp的库_用于nlp的python中的网站数据清理

    python中nlp的库 The most important step of any data-driven project is obtaining quality data. Without t ...

  7. 利用python中的csv库读写csv文件

    利用python中的csv库读写csv文件 python读写csv文件就我知道的方法有:1)利用csv库,2)利用读写txt文件的方式处理,3)利用numpy或pandas库处理 在这篇博客中,博主就 ...

  8. 用python中的turtle库绘制一些有趣的图

    最近有个在读大学的女生,想要我帮忙用python画几个图,在画的过程中觉得有些图还挺有意思的,分享给大家.    1 图1    第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtl ...

  9. python中的sheet,Python中的Smartsheet库:模块'smartsheet.sheets'没有属性'sheets'

    我正在尝试在python中使用smartsheet库. 使用'$ pip install smartsheet-python-sdk'完成pip安装. 我使用以下代码在令牌上进行了测试. import ...

最新文章

  1. Spoooooky CSS 选择器
  2. Premiere做影片时四周的黑框
  3. jquery ajax返回Internal server error 500错误解决方案
  4. Serverless的4种错误打开方式
  5. BigInteger用法-Java大数据存储、运算
  6. YbOJ-网格序列【拉格朗日插值】
  7. 真正的模块化Web应用程序:为什么没有开发标准?
  8. 【论文笔记】node2vec:可扩展的网络特征学习
  9. XenCenter 创建 New VM
  10. linux 网桥端口,linux网桥
  11. 快来,别人不知道的秘密,QQ空间视频下载教程
  12. 《机器学习实战》第三章:决策树(3)测试、存储、实例
  13. excel表格两个表格合并
  14. android第三方应用商店,Android第三方应用商店成长迅猛
  15. 带你走进开源阿卡信-v1.0
  16. 两地三中心是什么意思
  17. ERP是什么?能做什么?
  18. 最新调研-电子邮件归档解决方案行业研究分析报告
  19. Leetcode 1011. Capacity To Ship Packages Within D Days 在 D 天内送达包裹的能力
  20. springboot毕设项目小区停车场管理系统zvzay(1)(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. java utf 8 转unicode_java 在Unicode和UTF-8之间转换
  2. html细边框表格代码,html中表格细边框的四种实现及其比较.doc
  3. textedit怎么插入数据_还在手动插入Excel交叉空白行?这个小技巧10秒搞定
  4. perl与php,perl与php之异同
  5. java类什么时候卸载_java – Android:什么时候类被系统卸载?
  6. String.slice
  7. 【Canal源码分析】Sink及Store工作过程
  8. HttpRequest 类
  9. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
  10. 一个App完成入门篇(五)- 完成新闻页面