1. 程式人生 > >Python學習之-序列化與反序列化

Python學習之-序列化與反序列化

什麽是 註意 not 技術分享 js對象 字節 com 操作 是個

1、什麽是序列化與反序列化?

# 我們把對象(或變量)從內存變成可存儲或可傳輸的過程稱之為序列化,在python中被稱為picking;

# 自定義的類的實例如何保存在一個文件中?如何從文件中讀取數據,並讓他們在內存中再次恢復成自己對應的類的實例?

# 按照某種規則,把內存中的數據保存到文件中,文件是一個字節序列,所以必須要把內存數據轉換成為字節序列,輸出到文件,這就是序列化;反之,從文件的字節恢復到內存,就是反序列化;

2、為什麽要序列化?

# 持久化保持狀態;

# 跨平臺的數據交互;

3、pickle

# pickle模塊是python專用的持久化模塊,可以持久化包括自定義類在內的各種數據;只能在python程序之間進行數據交換

# 方法:

  • dumps   將對象序列化成bytes對象;
  • dump    對象序列化到文件對象,就是存入文件;
  • loads   從bytes對象反序列化;
  • load   對象反序列化,從文件讀取數據;

# 註意:在使用dump()序列化時候,打開文件必須要以wb模式,使用load()反序列化,打開文件必須以rb模式;

技術分享圖片

# 註意,序列化與反序列化必須保證使用同一套類的定義,否則會帶來不可預料的結果;

4、Json與json模塊

4.1、JSON

# JSON:JavaScript Object Notation,JS對象標記,是一種輕量級的數據交換格式;

# Json是跨平臺語言,所以只能對python的基本數據類型進行操作,無法識別python的類;

4.2、python與json模塊

(1)數據轉換:

技術分享圖片

(2)使用方法

技術分享圖片

(3)記憶方法:

# 1、序列化,數據到文件,就dump;

# 2、反序列化,文件到數據,就load;

# 3、根據字符串轉換就加s;

# 4、從文件直接轉就不加s;

# 一般來說json編碼的數據很少落地,數據都是通過網絡傳輸;傳輸的時候,就要考慮壓縮它;本質來說它就是個文本,就是字符串;

5、MessagePack

# MessagePack是一個基於二進制高效的對象序列化類庫,可以用於跨語言通訊;

# 它可以像JSON一樣,在多種語言之間交互結構對象;但是它比JSON更快也更輕巧;兼容json和pickle;

5.1、使用方法

# 1、先要通過pip安裝模塊, pip install msgpack-python;

# 2、由於它是基於二進制格式,所以在dump()和load()的時候操作文件要以wb和rb模式

技術分享圖片

Python學習之-序列化與反序列化