1. 程式人生 > 程式設計 >Python使用pickle進行序列化和反序列化的示例程式碼

Python使用pickle進行序列化和反序列化的示例程式碼

一、說明

早上看到Python使用pickle進行序列化和反序列化,然後發現面臨的一個獲取不到返回值的框架,似乎可以通過在框架中先序列化,然後在外部進行反序列化的方法來實現。就研究了一下pickle庫的具體使用。

本身也沒什麼複雜,一方面還是怕忘記,另一方面是自從學Java聽到反序化這個詞開始就有一種莫明其妙的恐具感總覺得是什麼高大上的東西。Java反序列化可參見“Java反序列化漏洞實現”。

二、程式碼實現

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()

執行結果如下,可以看到成功反序列化並打印出被序列化的物件的變數的值:

Python使用pickle進行序列化和反序列化的示例程式碼

參考:

https://docs.python.org/3/library/pickle.html

以上就是Python使用pickle進行序列化和反序列化的示例程式碼的詳細內容,更多關於python 序列化和反序列化的資料請關注我們其它相關文章!