持續化模組:就是讓資料持久化保存。
pickle模組是Python專用的持久化模組,可以持久化包括自訂類別在內的各種數據,比較適合Python本身複雜數據的存貯。
但是持久化後的字符串是不可認讀的,並且只能用於Python環境,不能用作與其它語言進行資料交換。
把Python 物件直接儲存到文件裡,而不需要先把它們轉換成字串再保存,也不需要用底層的文件存取操作,直接把它們寫入到一個二進位檔案裡。 pickle 模組會建立一個 Python 語言專用的二進位格式,不需要使用者考慮任何檔案細節,它會幫你完成讀寫物件操作。 用pickle比你開啟檔案、轉換資料格式並寫入這樣的操作要節省不少程式碼行。
#在pickle中dumps()和loads()操作的是bytes類型,而在使用dump()和l()
#############讀寫檔案時,要使用rb或wb模式,也就是只接收bytes類型的資料。 ############1. pickle.dump(obj, file) ############將Python資料轉換並儲存到pickle格式的檔案內。 #########
with open('data.pickle', 'wb') as f: pickle.dump(data, f)#########文字編輯器開啟上面儲存的data文件,會發現其中全是不可認讀的編碼。 ###############執行結果 :######################
将Python数据转换为pickle格式的bytes字串。
import pickle dic = {"k1":"v1","k2":123} s = pickle.dumps(dic) print(s)
运行结果:
3. pickle.load(file)
从pickle格式的文件中读取数据并转换为Python的类型。
with open('data.pickle', 'rb') as f: data = pickle.load(f)
将pickle格式的bytes字串转换为Python的类型。
import pickle dic = {"k1":"v1","k2":123} s = pickle.dumps(dic) dic2 = pickle.loads(s) print(dic2)
运行结果:
import pickle with open('data.pickle', 'rb') as f: data = pickle.load(f)
.picklle 格式的文件,用记事本打开是乱码。
运行结果:
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模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!