python中cPickle用法「建议收藏」

python中cPickle用法「建议收藏」在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle–Afasterpickle”。cPickle可以对任意一种类型的python对象进行序列化操作,比如list,dict,甚至是一个类的对象等。而所谓的序列化,我的粗浅的理解就是为了能够完整的保存并能够完全可逆的恢复。在cPi…

大家好,又见面了,我是你们的朋友全栈君。

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'})

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147741.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Webgame 设计与开发

    Webgame 设计与开发亲爱的读者,我是一名程序员,总怀着一种奢望,奢望去写本书。为什么称之为奢望呢?原因是一是经验不够丰富,二是工作紧张,时间有限,三是游戏阅历不深,四是游戏行业发展趋势不太明确,所以想写本关于游戏的书一直没有开始。近一年多来,随着对webgame的开发和理解,加上自身水平的的提高,感觉写本webgame的书时机已经成熟,关于该书的框架简单写了些,随着写作的深入,各个章节都将丰富。希望与

    2022年6月7日
    29
  • chkdsk命令修复磁盘没反应_chkdsk怎么修复c盘

    chkdsk命令修复磁盘没反应_chkdsk怎么修复c盘故障笔记本电脑进不了系统,XP系统的开机进度条一走完蓝屏画面一闪就自己重启了,试了安全模式与最后一次正确配置都是一样的情况,据笔记本的主人说想一键还原也不行(装有GHOST一键还原)。使用PE工具盘启动笔记本,进入“我的电脑”一看,C盘信息全没了,没有已用空间大小,也没有可用空间大小,连C盘大小也没有了,格式变成RAW,但是用工具盘上的DiskGenius却可以看到里面的文件,也可以看到C盘是NT…

    2025年7月15日
    0
  • aero是什么意思啊_自动驾驶视觉算法

    aero是什么意思啊_自动驾驶视觉算法数据集介绍aeroscapes数据集下载链接AeroScapes航空语义分割基准包括使用商用无人机在5到50米的高度范围内捕获的图像。该数据集提供3269张720p图像和11个类别的真实掩码。数据加载dataloder写法(基于pytorch)由于该数据集提供了掩码图,因此不需要进行掩码图转换。下载完成后,文件结构如下:ImageSets文件夹:存放了两个txt文件,划分了训练集和验证集。JPEGImages文件夹:存放了RGB图像。SegmentationClass

    2022年8月15日
    1
  • 如何理解极限的定义

    如何理解极限的定义极限是研究变量变化的过程,并通过变化的过程来把握变化的结果。一般来说一个函数某个点的结果是由函数确定了的,所以一个函数某个点的值一般就等于其极限。除非是提前,把那个点给挖走了,否则在那个变化过程中是没有什么办法能阻止变化的趋势的。但是也不能说极限就一定等于其函数值。 要理解好极限的定义,可以先从简单的,描述性的定义入手,然后再转到严格的数学定义上去。 描述性定义是这样的:当自变量x无

    2022年5月6日
    53
  • windows未能启动0xc000000e9_win7状态0xc00000e9

    windows未能启动0xc000000e9_win7状态0xc00000e9问题:计算机无法启动,错误代码为:0xc00000e9解决方法:1、如报错所示,\Windows\System32\config\system文件丢失或损坏;2、修复此问题,需打开Windo

    2022年8月4日
    6
  • Java安全之Commons Collections1分析(二)

    Java安全之CommonsCollections1分析(二)0x00前言续上篇文,继续调试cc链。在上篇文章调试的cc链其实并不是一个完整的链。只是使用了几个方法的的互相调用弹出一个计算器。

    2021年12月12日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号