Python3內建模組之Pickle和cPickle資料持久化方法小結
概述
模組Pickle
實現了對一個 Python 物件結構的二進位制的序列化和反序列化。 即當Python程式持續執行一些字串、列表字典、甚至自定義的類等資料物件,需要持久化儲存,即儲存在磁碟中,防止執行在記憶體中,因斷電等情況丟失資料。那麼Pickle模組就派上用場了,它可以將物件轉換為一種可以傳輸或儲存的格式。python的pickle模組實現了基本的資料序列和反序列化。透過pickle模組的序列化操作我們能夠將程式中執行的物件資訊儲存到檔案中去,永久儲存;透過pickle模組的反序列化操作,我們能夠從檔案中建立上一次程式儲存的物件。
與JSON模組的比較
可以看到pickle模組和看似相似,但其還是有著本質的不同,即:
-
JSON 是一個文字序列化格式(它輸出 unicode 文字,儘管在大多數時候它會接著以
utf-8
編碼),而 pickle 是一個二進位制序列化格式; -
JSON是字面量可讀的,而pickle不是(可以類比base64的不可讀性);
-
JSON是可互操作的,在Python系統之外廣泛使用,而pickle則是Python專用的;
序列化與反序列化
透過二進位制的方式讀寫目標儲存檔案,並利用dump
序列化資料物件,load
反序列化資料物件
D = {
'name': 'bob',
'major': {
'english',
'math'
},
'd': [1, 2, 3, 4, 5, 6, 7]
}
with open('D.pik', 'wb') as f:
pickle.dump(D, f)
with open('D.pik', 'rb') as f:
D = pickle.load(f)
print(type(D))
print(D)
示例結果:
<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
當然我們也可以序列化到記憶體(字串格式儲存),然後物件可以以任何方式處理如透過網路傳輸
pik = pickle.dumps(D)
print(pik)
D = pickle.loads(pik)
print(type(D))
print(D)
示例結果:
b'x80x03}qx00(Xx04x00x00x00nameqx01Xx03x00x00x00bobqx02Xx05x00x00x00majorqx03cbuiltinsnsetnqx04]qx05(Xx07x00x00x00englishqx06Xx04x00x00x00mathqx07ex85qx08RqtXx01x00x00x00dqn]qx0b(Kx01Kx02Kx03Kx04Kx05Kx06Kx07eu.'
<class 'dict'>
{'name': 'bob', 'major': {'english', 'math'}, 'd': [1, 2, 3, 4, 5, 6, 7]}
cPickle
cPickle包的功能和用法與pickle包幾乎完全相同 (其存在差別的地方實際上很少用到),不同在於cPickle是基於c語言編寫的,具有更好的效能,對於大多數應用程式,推薦使用該模組。對於上面的例子,如果想使用cPickle包,我們都可以將import語句改為import cPickle as pickle
進行使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4479/viewspace-2823019/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python核心模組之pickle和cPickle講解Python
- Python模組學習 :pickle, cPickle 物件序列化/反序列化Python物件
- pickle和cPickle:Python物件的序列化(下)Python物件
- pickle和cPickle:Python物件的序列化(上)Python物件
- Python3內建模組之玩出花兒的random隨機方法小結Pythonrandom隨機
- Python3 pickle模組的使用詳解Python
- Python標準庫分享之儲存物件 (pickle包,cPickle包)Python物件
- Docker之 資料持久化Docker持久化
- 序列化和反序列化pickle和json 模組JSON
- 可持久化資料結構持久化資料結構
- 【python】使用pickle模組將資料永久儲存,pickle.dump()序列化、pickle.load()反序列化例項詳解Python
- 內建資料結構集合和字典資料結構
- 可持久化資料結構1持久化資料結構
- 字串常用內建方法-python3字串Python
- Python序列化模組pickle和json使用和區別PythonJSON
- Python之資料序列化(json、pickle、shelve)PythonJSON
- Redis資料持久化—RDB持久化與AOF持久化Redis持久化
- iOS 資料持久化的幾種方法iOS持久化
- 內建資料結構-字串資料結構字串
- Python3內建模組之json編碼解碼方法講解PythonJSON
- python 序列化pickle&json模組PythonJSON
- Iptables之recent模組小結
- fabric資料持久化持久化
- Redis 資料持久化Redis持久化
- web 資料持久化Web持久化
- Docker資料持久化Docker持久化
- Python內建資料結構之雙向佇列Python資料結構佇列
- Python 快速教程(標準庫05):儲存物件 (pickle包,cPickle包)Python物件
- Redis 持久化之RDB和AOFRedis持久化
- Python SqlAlchemy資料庫持久化使用方法PythonSQL資料庫持久化
- 【資料結構】可持久化線段樹初步資料結構持久化
- 使用Hector和Scala持久化Cassandra資料庫持久化資料庫
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- Redis的資料持久化Redis持久化
- 鴻蒙資料持久化sqlite鴻蒙持久化SQLite
- Spring Cloud Gateway實戰之四:內建predicate小結SpringCloudGateway
- 總結:11個Python3字典內建方法大全及示例Python
- 總結:44個Python3字串內建方法大全及示例Python字串