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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python3內建模組之玩出花兒的random隨機方法小結Pythonrandom隨機
- Python3內建模組之json編碼解碼方法講解PythonJSON
- Python標準庫分享之儲存物件 (pickle包,cPickle包)Python物件
- Python之資料序列化(json、pickle、shelve)PythonJSON
- Docker之 資料持久化Docker持久化
- Python3 pickle模組的使用詳解Python
- JSON和pickle模組JSON
- 可持久化資料結構持久化資料結構
- 序列化和反序列化pickle和json 模組JSON
- Python內建模組之 re庫Python
- 初識Node和內建模組
- 可持久化資料結構1持久化資料結構
- 工業資料分析之數倉建模 | 正規化建模和維度建模,你pick誰?
- Redis資料持久化—RDB持久化與AOF持久化Redis持久化
- fabric資料持久化持久化
- Docker資料持久化Docker持久化
- Redis 資料持久化Redis持久化
- python 序列化pickle&json模組PythonJSON
- Python 內建模組:os模組Python
- Redis 持久化之RDB和AOFRedis持久化
- 【資料結構】可持久化線段樹初步資料結構持久化
- 開心檔之Python3 資料結構Python資料結構
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 資料治理一體化實踐之體系化建模
- 內建模組--壓縮模組--zipfile
- 【Immutable.js】可持久化資料結構以及結構分享JS持久化資料結構
- python 內建模組續(二)Python
- 【Unity】資料持久化PlayerPrefsUnity持久化
- Redis的資料持久化Redis持久化
- 結構化資料、半結構化資料和非結構化資料
- Docker最全教程——資料庫容器化之持久儲存資料(十一)Docker資料庫
- 1.05 docker的持久化儲存和資料共享Docker持久化
- Docker的持久化儲存和資料共享(四)Docker持久化
- UI(十六)資料持久化和歸檔NSCoding序列化UI持久化
- Python3結構化資料庫操作包pymysqlPython資料庫MySql
- 資料的序列化&持久化持久化
- 資料治理之資料梳理與建模
- 資料倉儲建模方法論