一文帶你搞懂 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)

運行結果:

  1. 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