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字典排序实例详解
May 20 Python
详解详解Python中writelines()方法的使用
May 25 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
Python多进程并发与多线程并发编程实例总结
Feb 08 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
20行python代码实现人脸识别
May 05 Python
使用python实现简单五子棋游戏
Jun 18 Python
python调试神器PySnooper的使用
Jul 03 Python
基于django传递数据到后端的例子
Aug 16 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
python如何更新包
Jun 11 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
移动端js图片查看器
2016/11/17 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
浅谈Express异步进化史
2017/09/09 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
python基础教程之缩进介绍
2014/08/29 Python
Python类定义和类继承详解
2015/05/08 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
Php多进程实现代码
2018/05/07 Python
python学生管理系统开发
2019/01/30 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python中rc1什么意思
2020/06/19 Python
python中如何设置代码自动提示
2020/07/15 Python
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
客服部工作职责范本
2014/02/14 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
给老婆的保证书范文
2014/04/28 职场文书
聘用意向书
2014/07/29 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
捐款仪式主持词
2015/07/04 职场文书
初中生活随笔
2015/08/15 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL