一文帶你搞懂 Python 中 pickle 模塊
大家好,我是 Go 進階者。今天給大家分享 Python 基礎之 pickle 模塊。
一、什麼是 pickle 模塊?
什麼是持續化模塊?
持續化模塊:就是讓數據持久化保存。
pickle 模塊是 Python 專用的持久化模塊,可以持久化包括自定義類在內的各種數據,比較適合 Python 本身複雜數據的存貯。
但是持久化後的字串是不可認讀的,並且只能用於 Python 環境,不能用作與其它語言進行數據交換。
二、pickle 模塊的作用
把 Python 對象直接保存到文件裏,而不需要先把它們轉化爲字符串再保存,也不需要用底層的文件訪問操作,直接把它們寫入到一個二進制文件裏。pickle 模塊會創建一個 Python 語言專用的二進制格式,不需要使用者考慮任何文件細節,它會幫你完成讀寫對象操作。用 pickle 比你打開文件、轉換數據格式並寫入這樣的操作要節省不少代碼行。
三、主要方法
在 pickle 中 dumps() 和 loads() 操作的是 bytes 類型,而在使用 dump() 和 lload() 讀寫文件時,要使用 rb 或 wb 模式,也就是隻接收 bytes 類型的數據。
1. pickle.dump(obj, file)
將 Python 數據轉換並保存到 pickle 格式的文件內。
with open('data.pickle', 'wb') as f:
pickle.dump(data, f)
文本編輯器打開上面保存的 data 文件,會發現其中全是不可認讀的編碼。
運行結果 :
2. pickle.dumps(obj)
將 Python 數據轉換爲 pickle 格式的 bytes 字串。
import pickle
dic = {"k1":"v1","k2":123}
s = pickle.dumps(dic)
print(s)
運行結果:
- pickle.load(file)
從 pickle 格式的文件中讀取數據並轉換爲 Python 的類型。
with open('data.pickle', 'rb') as f:
data = pickle.load(f)
4. pickle.loads(bytes_object)
將 pickle 格式的 bytes 字串轉換爲 Python 的類型。
import pickle
dic = {"k1":"v1","k2":123}
s = pickle.dumps(dic)
dic2 = pickle.loads(s)
print(dic2)
運行結果:
四、項目演示
例 1:
import pickle
with open('data.pickle', 'rb') as f:
data = pickle.load(f)
.picklle 格式的文件,用記事本打開是亂碼。
運行結果:
例 2
Pickle 可以持久化 Python 的自定義數據類型,但是在反持久化的時候,必須能夠讀取到類的定義。
import pickle
class Person:
def __init__(self, n, a):
self.name = n
self.age = a
def show(self):
print(self.name+"_"+str(self.age))
aa = Person("張三", 20)
aa.show()
f = open('2.txt', 'wb')
pickle.dump(aa, f)
f.close()
# del Person # 注意這行被註釋了
f = open('2.txt', 'rb')
bb = pickle.load(f)
f.close()
bb.show()
運行結果:
如果取消對del Person
這一行的註釋,在代碼中刪除了 Person 類的定義,那麼後面的load()
方法將會出現錯誤。
五、總結
本文主要介紹了 Python 中 pickle 模塊,對模塊中主要的方法進行了詳細的介紹。對遇到的問題進行詳細的解答。最後使用 Python 編程語言,通過在實際開發中的項目。方便大家對 pickle 模塊的認知。希望對大家的學習有幫助。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Wg2-OjrS1tldemzNIoeC8g