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

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

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

【作用】将obj的pickled对象写入打开的文件对象file中

obj:是需要序列化处理的对象

file:文件对象,必须有一个write()方法,该方法接受一个字节参数。因此,它可以是为二进制文件打开的文件对象写入、io.BytesIO实例或其他自定义对象。

protocol:告诉pickler对象使用给定的协议,它能够支持的协议有0、1、2、3、4。违约协议是3,为Python 3设计的向后不兼容协议。貌似是为了兼容性考虑的一个参数,不常用。

fix_imports:如果*fix_imports*为真且协议小于3,pickle将尝试将新的Python 3名称映射到Python中使用的旧模块名称2,这样pickle数据流可以用Python 2读取。也是为了兼容性考虑,这里不做赘述了。默认设置可以达到兼容需求。

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

【作用】将对象的pickled表示形式(obj)返回为bytes对象。

参数同pickle.dump方法

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

这里并没有protocol参数,这是因为pickle的协议版本是自动检测的,超过pickled对象的字节数表示将被忽略。

【作用】从存储在文件中的pickle数据读取并返回对象

file:必须有两个方法,一个read(intNumber)方法和一个readline()方法。两个方法都应该返回字节,因此该参数可以是打开要读取的二进制文件对象、io.BytesIO对象或任何符合条件的自定义对象。

fix_imports、encoding、errors:这三个参数可选,用于控制pickle流的兼容性支持。如果fix-imports为真,pickle将尝试将旧的Python 2名称映射到Python 3中使用的新名称。encoding、errors参数告诉pickle如何解码8位字符串,默认解码方式和容错机制为“ASCII”和“strict”。也是为了兼容性考虑,不常用。

pickle.loads(data, *, fix_imports=True, encoding='ASCII', errors='strict')

【作用】从给定的pickle数据读取并返回对象。

参数作用用法参照pickle.loads()方法。

(3)pickle.dumps(obj[, protocol])

       函数的功能:将obj对象序列化为string形式,而不是存入文件中。

       参数讲解:

  • obj:想要序列化的obj对象。
  • protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

(4)pickle.loads(string)

       函数的功能:从string中读出序列化前的obj对象。

       参数讲解:

  • string:文件名称。

     【注】 dump() 与 load() 相比 dumps() 和 loads() 还有另一种能力dump()函数能一个接着一个地将几个对象序列化存储到同一个文件中,随后调用load()来以同样的顺序反序列化读出这些对象。

 

 

 


 

参考:https://www.cnblogs.com/fmgao-technology/p/9078918.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章