【Python教學】使用Pickle序列化物件的用法介紹

什麼是Python Pickle
The Pickle module implements binary protocols for serializing and de-serializing a Python object structure. — Python.org Document
Pickle是python內建的套件,依照官方的定義是對物件結構提供了一個二進制序列化與反序列化功能的模組。
為什麼要序列化/反序列化
我們都知道電腦儲存資料的方式是以二進制在儲存資料的,但在人類可以看得懂的描述或是結構都是屬於未序列化的儲存方式來呈現,其最主要的目的跨平台儲存、資料傳輸以及最小化資料。
舉個例子來說,如果要把一棟房子搬運到其他地方,房子是由一塊塊磚塊所組成,序列化就是我把房子拆成一塊塊的磚塊來運輸,磚塊都到達目的地後再組裝成房子就是反序列化。
Pickle在Python中的用途
Pickle是Python專屬的序列化/反序列化模組,主要用途有以下幾點:
- 資料永久儲存
- 資料傳輸
- 最小化資料
我最常用的就是把Python中的Class的Instance存起來或是把整個Machine learning的Dataset打包成一個檔案,在測試的時候非常方便。
如何使用Pickle
Pickle儲存資料
import pickle
foo_list = [2,4,6]
with open('foo_list.pickle', 'wb') as f:
pickle.dump(foo_list, f)
這裡使用list這個資料結構來儲存,wb
表示寫入及以binary的方式儲存,除了list可以這樣直接存,Class的instance或是dictionary也是可以把整個資料結構以及成員狀態都存起來。
Pickle讀取資料
import pickle
with open('foo_list.pickle', 'rb') as f:
foo_list = pickle.load(f)
print(foo_list)
# output: [2, 4, 6]
輕輕鬆鬆就把想要的資料讀進來,簡單吧,會了就來跟我一起跳舞吧。

推薦閱讀
Reference
- https://docs.python.org/3/library/pickle.html
- https://www.educba.com/python-pickle-vs-json/
- https://korbillgates.tistory.com/173
- https://zh.m.wikipedia.org/zh-tw/%E5%BA%8F%E5%88%97%E5%8C%96