自學Python教程【第六十三節】pickle
同學們!歡迎大家來到自學Python教程教室,上一講我們分享了關于在哪里些Python的問題——Python shell,這節課我們學習pickle的相關內容。
在之前的課程中,我們有講到通過文件來保存、中轉數據(參見第29、30、31課)。在使用文件存儲時,通常需要對數據進行一些處理,按照一定的規范把數據整理成文本,再寫入文件中。下次使用時,從文件中讀出文本,再按照此規范解析這些數據。
這種將數據轉成文本的過程又被稱為“序列化”,即將對象狀態轉換為可保持或傳輸的格式的過程。對應的,從序列化的格式中解析對象狀態的過程被稱為“反序列化”。
在之前的課程和示例中,我們都自己手動實現了這個過程。其實 Python 提供了一個標準模塊來做這件事,就是 pickle。它可以把任何 Python 對象存儲在文件中,再把它原樣取出來。
來看一下存儲的過程:
import pickle
test_data = ['Save me!', 123.456, True]
f = file('test.data', 'w')
pickle.dump(test_data, f)
f.close()
這樣,我們就把 test_data 這個 list 存儲在了文件 test.data 中。你可以用文本編輯器打開 test.data 查看里面的內容:
(lp0
S'Save me!'
p1
aF123.456
aI01
a.
這就是經 pickle 序列化后的數據,隱約可以看到之前對象的影子。你可能無法看出這個文件的規律,這沒關系,Python 能看懂就可以了。
下面取存儲的過程:
import pickle
f = file('test.data')
test_data = pickle.load(f)
f.close()
print test_data
控制臺的輸出:
['Save me!', 123.456, True]
和存儲前的數據是一致的。
如果你想保存多個對象,一種方法是把這些對象先全部放在一個序列中,在對這個序列進行存儲:
a = 123
b = "hello"
c = 0.618
data = (a, b, c)
...
pickle.dump(data, f)
另一種方法就是依次保存和提?。?/p>
... pickle.dump(a, f) pickle.dump(b, f) pickle.dump(c, f) ... x = pickle.load(f) y = pickle.load(f) z = pickle.load(f)
dump 方法可以增加一個可選的參數,來指定用二進制來存儲:
pickle.dump(data, f, True)
而 load 方法會自動檢測數據是二進制還是文本格式,無需手動指定。
Python 還提供了另一個模塊 cPickle,它的功能及用法和 pickle 模塊完全相同,只不過它是用C語言編寫的,因此要快得多(比pickle快1000倍)。因此你可以把上述代碼中的 pickle 全部替換為 cPickle,從而提高運行速度(盡管在這個小程序中影響微乎其微)。
好啦,今天的分享到這里就結束了,希望大家能夠持續關注馬哥教育官網,每天都會有大量優質內容與大家分享歐!免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。
聲明:文章來源于網絡,侵刪!