日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pickle库的使用详解

發布時間:2024/1/17 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pickle库的使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在“通過簡單示例來理解什么是機器學習”這篇文章里提到了pickle庫的使用,本文來做進一步的闡述。

?

那么為什么需要序列化和反序列化這一操作呢?

  1.便于存儲。序列化過程將文本信息轉變為二進制數據流。這樣就信息就容易存儲在硬盤之中,當需要讀取文件的時候,從硬盤中讀取數據,然后再將其反序列化便可以得到原始的數據。在Python程序運行中得到了一些字符串、列表、字典等數據,想要長久的保存下來,方便以后使用,而不是簡單的放入內存中關機斷電就丟失數據。python模塊大全中的Pickle模塊就派上用場了,它可以將對象轉換為一種可以傳輸或存儲的格式。

  2.便于傳輸。當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個對象轉換為字節序列,在能在網絡上傳輸;接收方則需要把字節序列在恢復為對象。

  • 通過簡單示例來理解什么是機器學習

pickle是python語言的一個標準模塊,安裝python后已包含pickle庫,不需要單獨再安裝。
pickle模塊實現了基本的數據序列化和反序列化。通過pickle模塊的序列化操作我們能夠將程序中運行的對象信息保存到文件中去,永久存儲;通過pickle模塊的反序列化操作,我們能夠從文件中創建上一次程序保存的對象。
在官方的介紹中,序列化操作的英文描述有好幾個單詞,如”serializing”, “pickling”, “serialization”, “marshalling” 或者”flattening”等,它們都代表的是序列化的意思。相應的,反序列化操作的英文單詞也有好多個,如”de-serializing”, “unpickling”, “deserailization”等。為了避免混淆,一般用”pickling”/“unpickling”, 或者”serialization”/“deserailization”。
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,有一點需要注意,必須是以二進制的形式進行操作(寫入)。
參考前文的案例如下:

1 2 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。
關于參數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。

插播一條硬廣:技術文章轉發太多,本文來自微信公眾號:“Python數據之道”(ID:PyDataRoad)。

3 反序列化操作

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

序列化的方法為?pickle.load(),該方法的相關參數如下:
pickle.load(file, *,fix_imports=True, encoding=”ASCII”. errors=”strict”)
該方法實現的是將序列化的對象從文件file中讀取出來。它的功能等同于?Unpickler(file).load()。
關于參數file,有一點需要注意,必須是以二進制的形式進行操作(讀取)。
參考前文的案例如下:

1 2 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() 是一樣的。
關于Unpickler類的其他method,請參考官方API。

4 那些類型可以進行序列化和反序列化操作

官方文檔是這么介紹的,這里我就不進一步描述了。

寫在后面

pickle模塊還是比較實用的,當然,關于pickle模塊,其實還有許多的信息可以去了解,想了解更多信息的童鞋,建議可以閱讀下python官方的API文檔(library文件)。

?

?

轉載自http://www.php.cn/python-tutorials-372984.html

轉載于:https://www.cnblogs.com/Hessen/p/8961354.html

總結

以上是生活随笔為你收集整理的pickle库的使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。