python中cPickle类使用方法详解


Posted in Python onAugust 27, 2018

在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle ? A faster pickle”。

cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。在cPickle中,主要有四个函数可以做这一工作,下面使用例子来介绍。

1. dump: 将python对象序列化保存到本地的文件

import cPickle
 data = range(1000)
 cPickle.dump(data,open("test\\data.pkl","wb"))

dump函数需要指定两个参数,第一个是需要序列化的python对象名称,第二个是本地的文件,需要注意的是,在这里需要使用open函数打开一个文件,并指定“写”操作

2. load:载入本地文件,恢复python对象

data = cPickle.load(open("test\\data.pkl","rb"))

同dump一样,这里需要使用open函数打开本地的一个文件,并指定“读”操作

3. dumps:将python对象序列化保存到一个字符串变量中

data_string = cPickle.dumps(data)

4. loads:从字符串变量中载入python对象

data = cPickle.loads(data_string)

5. pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言说识别。要和其他语言交互,可以使用内置的json包

使用pickle模块你可以把Python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。

pickle模块中的两个主要函数是dump()和load()。dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存 到给定的文件中。当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到它们本来的格式。

  • dumps()函数执行和dump() 函数相同的序列化。取代接受流对象并将序列化后的数据保存到磁盘文件,这个函数简单的返回序列化的数据。
  • loads()函数执行和load() 函数一样的反序列化。取代接受一个流对象并去文件读取序列化后的数据,它接受包含序列化后的数据的str对象, 直接返回的对象。

cPickle是pickle得一个更快得C语言编译版本。

pickle和cPickle相当于java的序列化和反序列化操作

#! /usr/local/env python
# -*- coding=utf-8 -*-

if __name__ == "__main__":
  import cPickle

#序列化到文件
obj = 123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}
print obj
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
#r+ 读写权限 r+b 读写到二进制文件
f = open(r"d:\a.txt","r+")
cPickle.dump(obj,f)
f.close()
f = open(r"d:\a.txt")
print cPickle.load(f)
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})

#序列化到内存(字符串格式保存),然后对象可以以任何方式处理如通过网络传输
obj1 = cPickle.dumps(obj)
print type(obj1)
#输出:<type 'str'>
print obj1
#输出:python专用的存储格式
obj2 = cPickle.loads(obj1)
print type(obj2)
#输出:<type 'tuple'>
print obj2
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python绘制数据的瀑布图的教程
Apr 07 Python
python实现从ftp服务器下载文件的方法
Apr 30 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
12步教你理解Python装饰器
Feb 25 Python
让Python更加充分的使用Sqlite3
Dec 11 Python
python事件驱动event实现详解
Nov 21 Python
机器学习实战之knn算法pandas
Jun 22 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
python散点图实例之随机漫步
Aug 27 #Python
python3.5绘制随机漫步图
Aug 27 #Python
Python反射和内置方法重写操作详解
Aug 27 #Python
Python使用matplotlib绘制随机漫步图
Aug 27 #Python
Python面向对象之继承和组合用法实例分析
Aug 27 #Python
Python干货:分享Python绘制六种可视化图表
Aug 27 #Python
python使用matplotlib库生成随机漫步图
Aug 27 #Python
You might like
PHP session会话的安全性分析
2011/09/08 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
require.js中的define函数详解
2017/07/10 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python socket网络编程之粘包问题详解
2018/04/28 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
QML使用Python的函数过程解析
2019/09/26 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
详解CSS3选择器的使用方法汇总
2015/11/24 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
关于孝道的演讲稿
2014/05/21 职场文书
企业宣传口号
2014/06/12 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
邹越演讲观后感
2015/06/15 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
redis数据结构之压缩列表
2022/03/21 Redis