全国咨询/投诉热线:400-618-9090

首页技术文章正文

Pickle模块的使用

更新时间:2018-11-26 来源:黑马程序员 浏览量:

  1.Pickle的介绍

  pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装

  序列化和反序列化作用

  1.便于存储。序列化过程将文本信息转变为二进制数据流。这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据。在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。python模块大全中的Pickle模块就派上用场了,它可以将对象转换为一种可以传输或存储的格式。

  2.便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把這个对象转换为字节序列,在能在网络上传输;接收方则需要把字节序列在恢复为对象。

  pickle模块是以二进制的形式序列化后保存到文件中(保存文件的后缀为”.pkl”),不能直接打开进行预览。而python的另一个序列化标准模块json,则是human-readable的,可以直接打开查看(例如在notepad++中查看)。

  pickle模块有两类主要的接口,即序列化和反序列化。

  其中序列化操作包括:

  pickle.dump()

  Pickler(file, protocol).dump(obj)

  反序列化操作包括:

  pickle.load()

  Unpickler(file).load()

  2 序列化操作

  2.1 序列化方法pickle.dump()

  序列化的方法为 pickle.dump(),该方法的相关参数如下:

  pickle.dump(obj, file, protocol=None,*,fix_imports=True)

  该方法实现的是将序列化后的对象obj以二进制形式写入文件file中,进行保存。它的功能等同于 Pickler(file, protocol).dump(obj)。

  关于参数file,有一点需要注意,必须是以二进制的形式进行操作(写入)。

  参考前文的案例如下:

  import picklewith open('svm_model_iris.pkl', 'wb') as f:

  pickle.dump(svm_classifier, f)

  file为'svm_model_iris.pkl',并且以二进制的形式('wb')写入。

  关于参数protocol,一共有5中不同的类型,即(0,1,2,3,4)。(0,1,2)对应的是python早期的版本,(3,4)则是在python3之后的版本。

  此外,参数可选 pickle.HIGHEST_PROTOCOL和pickle.DEFAULT_PROTOCOL。当前,python3.5版本中,pickle.HIGHEST_PROTOCOL的值为4,pickle.DEFAULT_PROTOCOL的值为3。当protocol参数为负数时,表示选择的参数是pickle.HIGHEST_PROTOCOL。

  2.2 序列化方法pickle.dumps()

  pickle.dumps()方法的参数如下:

  pickle.dumps(obj, protocol=None,*,fix_imports=True)

  pickle.dumps()方法跟pickle.dump()方法的区别在于,pickle.dumps()方法不需要写入文件中,它是直接返回一个序列化的bytes对象。

  2.3 序列化方法Pickler(file, protocol).dump(obj)

  pickle模块提供了序列化的面向对象的类方法,即 class pickle.Pickler(file, protocol=None,*,fix_imports=True),Pickler类有dump()方法。

  Pickler(file, protocol).dump(obj) 实现的功能跟 pickle.dump() 是一样的。

  关于Pickler类的其他method,请参考官方API。

  3 反序列化操作

  3.1 反序列化方法pickle.load()

  序列化的方法为 pickle.load(),该方法的相关参数如下:

  pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)

  该方法实现的是将序列化的对象从文件file中读取出来。它的功能等同于 Unpickler(file).load()。

  关于参数file,有一点需要注意,必须是以二进制的形式进行操作(读取)。

  参考前文的案例如下:

  import picklewith open('svm_model_iris.pkl', 'rb') as f:

  model = pickle.load(f)

  file为'svm_model_iris.pkl',并且以二进制的形式('rb')读取。

  读取的时候,参数protocol是自动选择的,load()方法中没有这个参数。

  3.2 反序列化方法pickle.loads()

  pickle.loads()方法的参数如下:

  pickle.loads(bytes_object, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)

  pickle.loads()方法跟pickle.load()方法的区别在于,pickle.loads()方法是直接从bytes对象中读取序列化的信息,而非从文件中读取。

  3.3 反序列化方法Unpickler(file).load()

  pickle模块提供了反序列化的面向对象的类方法,即 class pickle.Unpickler(file, *,fix_imports=True, encoding="ASCII". errors="strict"),Pickler类有load()方法。

  Unpickler(file).load() 实现的功能跟 pickle.load() 是一样的。



作者:传智播人工智能+Python培训学院

首发: http://python.itheima.com

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名