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使用win32com在百度空间插入html元素示例
Feb 20 Python
python实现给字典添加条目的方法
Sep 25 Python
python中map、any、all函数用法分析
Apr 21 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
python比较2个xml内容的方法
May 11 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python实现的分层随机抽样案例
Feb 25 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
PHP多维数组排序array详解
2017/11/21 PHP
javascript 写类方式之八
2009/07/05 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
pycharm安装和首次使用教程
2018/08/27 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
优秀士兵先进事迹
2014/02/06 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
通知怎么写?
2019/04/17 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
python ansible自动化运维工具执行流程
2021/06/24 Python
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA