Python使用pickle進行序列化和反序列化的示例代碼
一、說明
早上看到Python使用pickle進行序列化和反序列化,然后發(fā)現(xiàn)面臨的一個獲取不到返回值的框架,似乎可以通過在框架中先序列化,然后在外部進行反序列化的方法來實現(xiàn)。就研究了一下pickle庫的具體使用。
本身也沒什么復雜,一方面還是怕忘記,另一方面是自從學Java聽到反序化這個詞開始就有一種莫明其妙的恐具感總覺得是什么高大上的東西。Java反序列化可參見“Java反序列化漏洞實現(xiàn)”。
二、代碼實現(xiàn)
import pickle class BeSerializing: def __init__(self): self.var = "a test string." def print_var(self): print(f"self var value is:{self.var}") class Serializing: def do_serializing(self): obj = BeSerializing() # with的好處是會最后自動釋放獲取的資源,對于文件就是最后會自己close() with open("test_pickle.obj", "wb") as file_handler: # 序列化,將對象寫到文件 pickle.dump(obj, file_handler) class DeSerializing: def do_serializing(self): with open("test_pickle.obj", "rb") as file_handler: # 反序列化,將對象從文件中還原 # 注意,雖然python的變量不需要使用前先定義類型,但使用時是要被格式化成確定類型的 # 所以,如果反序列化類和被序列化類不在同一文件中,那么需要將被序列化類import進來,不然會因找不到被反序列化類而反序列化失敗 obj = pickle.load(file_handler) print(f"obj type: {type(obj)}\n" f"obj.var value: {obj.var}") if __name__ == "__main__": obj_se = Serializing() obj_se.do_serializing() obj_de = DeSerializing() obj_de.do_serializing()
運行結果如下,可以看到成功反序列化并打印出被序列化的對象的變量的值:
參考:
https://docs.python.org/3/library/pickle.html
以上就是Python使用pickle進行序列化和反序列化的示例代碼的詳細內(nèi)容,更多關于python 序列化和反序列化的資料請關注腳本之家其它相關文章!
相關文章
pyinstaller打包exe程序的步驟和添加依賴文件的實現(xiàn)
這篇文章主要介紹了pyinstaller打包exe程序的步驟和添加依賴文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Python列表(list)、字典(dict)、字符串(string)基本操作小結
這篇文章主要介紹了Python列表(list)、字典(dict)、字符串(string)基本操作小結,本文總結了最基本最常用的一些操作,需要的朋友可以參考下2014-11-11Python入門Anaconda和Pycharm的安裝和配置詳解
這篇文章主要介紹了Python入門Anaconda和Pycharm的安裝和配置詳解,文章通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07Python連接Mssql基礎教程之Python庫pymssql
這篇文章主要給大家介紹了關于Python連接Mssql基礎教程之Python庫pymssql的相關資料,文中分別介紹了連接數(shù)據(jù)庫、游標使用注意事項、游標返回行為字典變量、使用with語句(上下文管理器)以及調(diào)用存儲過程等的實現(xiàn),需要的朋友可以參考下2018-09-09