什么是pickle?

学习《深度学习》鱼书的源码时,刚看到加载mnist数据集所用到的mnist.pkl文件,理所当然的以为pkg这样的package安装包文件。奇怪安装包为何被包含在代码目录中,结果发现

init_mnist函数还要加载它。

我们来看看这个神秘的mnist.pkl文件,打开资源管理器,发现这个文件竟然有53M

使用EditPlus打开,乱码,二进制的。

回归正题,什么是pickle?

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

pickle序列化后的数据,可读性差,人一般无法识别。

pickle序列化的函数如下:

pickle.dump(obj, file[, protocol]) #序列化对象obj,并将结果数据流写入到文件对象file中param:obj,      输入对象,包含几乎所有的python数据类型(列表,字典,集合,类等)file,    表示保存到的类文件对象; 注意:file必须有write()接口,file可以是一个以'w'打开的文件或者是一个StringIO对象,也可以是任何可以实现write()接口的对象。protocol,序列化模式0:默认值,ASCII协议,表示以文本的形式序列化 1:二进制的形式序列化(老式的二进制协议)2:二进制的形式序列化(新的二进制协议)3/4/-1:python3中指定的协议,目的是让python2.x无法解析

与之对应的是反序列化对象函数:

pickle.load(file)  #反序列化对象, 将文件中的数据解析为一个Python对象#注意:在load(file)的时候,要让python能够找到类的定义,否则会报错#file中有read()接口和readline()接口

其它函数:

pickle.dumps(obj)  #以字节对象形式返回封装的对象,不需要写入文件中
pickle.loads(bytes_object) #从字节对象中读取被封装的对象,并返回
pickle模块可能出现三种异常:1. PickleError:封装和拆封时出现的异常类,继承自Exception2. PicklingError: 遇到不可封装的对象时出现的异常,继承自PickleError3. UnPicklingError: 拆封对象过程中出现的异常,继承自PickleError

应用举例:回到加载mnist数据集的使用上:

def init_mnist():download_mnist()dataset = _convert_numpy()print("Creating pickle file ...")with open(save_file, 'wb') as f: //f为可用'wb'写入的二进制文件pickle.dump(dataset, f, -1) //protocol为-1,python3中指定的协议,默认为3,当<0时,值为4print("Done!")if not os.path.exists(save_file):init_mnist()with open(save_file, 'rb') as f:  //f为可用'rb'打开的二进制文件,'r'仅能打开文本文件dataset = pickle.load(f)

什么是pickle?相关推荐

  1. 序列化模块--json模块--pickle模块-shelve模块

    什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传播到远程,因为硬盘或网络传输时只能接受bytes 例: 把内存数据 转成字符 # data ={# 'roles ...

  2. Python基础18-常用模块之os、sys、json、pickle、shelve、xml、re、logging、configparse、hashlib等

    目录 os.os.path sys json pickle.shelve.xml.re.logging.configparse.hashlib未完待续-- os.os.path Python的os模块 ...

  3. Python中的pickle模块

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. Pickle模块的作用 Pickle模块用于将python对象序列化为字节流,可存储在文件或数据库中,也可同通过网络进行 ...

  4. Python--数据存储:pickle模块的使用讲解

    在机器学习中,我们常常需要把训练好的模型存储起来,这样在进行决策时直接将模型读出,而不需要重新训练模型,这样就大大节约了时间.Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象 ...

  5. python模块之json,pickle

    序列化是指把内存里的数据转变成字符串,以使其能保存到硬盘上或者通过网络输送到远程. 序列化的两个模块: json:只能把python中的int/str/list/tuple/dict类型的数据,可以在 ...

  6. Python pickle模块:实现Python对象的持久化存储

    Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化.也就是说,pickle 可以实现 Python 对象的存储及恢复. ...

  7. day4 匿名函数、装饰器、生成器、迭代器、内置函数、 json 与 pickle 模块

    文章目录 1.列表生成式 2.匿名函数 3.装饰器 4.生成器 5.迭代器 6.内置函数 7.json & pickle 序列化与反序列化 1.列表生成式 可通过特定语句便捷生成列表 list ...

  8. 零基础入门学习Python(29)pickle模块

    作用 pickle模块几乎可以把所有Python的对象都转化为二进制的形式存放,这个过程称为pickling,从二进制形式转换为对象的过程称为unpickling. pickle.dump9data, ...

  9. Pandas将dataframe保存为pickle文件并加载保存后的pickle文件查看dataframe数据实战

    Pandas将dataframe保存为pickle文件并加载保存后的pickle文件查看dataframe数据实战 目录 Pandas将dataframe保存为pickle文件并加载保存后的pickl ...

  10. python使用pickle保存和加载机器学模型

    python使用pickle保存和加载机器学模型 # 导入需要的包和库: # Import Required packages #-------------------------# Import t ...

最新文章

  1. 使用remoting远程控制编译机
  2. python3 解析html_Python3.x网页抓取HTMLParser
  3. 湖南hp服务器虚拟化解决方案,HP刀片服务器虚拟化整合解决方案-20210729062411.docx-原创力文档...
  4. linux tcp文件分包_Linux c实现一个tcp文件服务器和客户端
  5. 那些年我们一起追寻过的考研(华科计算机)
  6. 谷歌搜索技巧大全,google高级搜索语法指令怎么用
  7. 作业帮冯雪胡不归问题_【凭谁唤君胡不归作文】作业帮
  8. 内农大计算机学院宿舍,新疆农业大学科学技术学院宿舍条件怎么样
  9. java倒计时_详解java倒计时三种简单实现方式
  10. 《绮梦朦胧,一眼浮生醉流年》
  11. 【Hibernate步步为营】--映射合集汇总
  12. panda经典四道题期末考核分享
  13. 登陆界面改怎么测试,分析,测试用例
  14. web的标准网页设计与php课后,web网页设计尺寸规范
  15. windows 10 build 10074 内部预览版 连不上windows update
  16. video标签的全部配置
  17. python基础教程:python+gdal+遥感图像拼接(mosaic)的实
  18. 自定义顺序/九宫格抽奖
  19. 使用JointJS绘制流程图1
  20. PAT 基于词频的文件相似度 (set) -- 解题报告

热门文章

  1. 笔记:APDrawingGAN: Generating Artistic Portrait Drawings From Face Photos With Hierarchical GANs
  2. c#实现动态加载Dll
  3. Dw 2020最新版下载地址 一键安装Windows
  4. js打怪兽(封装函数)
  5. mysql的过程返回执行成功与失败_mysqli_query函数执行成功返回一个结果标识符,失败时返回false...
  6. Python+selenium(二)
  7. Nginx的正向代理和反向代理
  8. 西门子PLC指令表IL与梯形图或语句表编程有啥不同
  9. 今日头条2018校园招聘第一题 ---POJ 2479
  10. 1-Java常见基础