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


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;

(4)寫入與讀取的實例

import json
acc_dic={
    'id':1234,
    'password':'abc',
    'credit':15000,
    'balance':15000,
    'enroll_data':'2018-11-19',
    'expire_data':'2021-11-19',
    'pay_day':22,
    'status':0  # 0=normal,1=locked,2=disabled
}

# 寫入到文件
with open('accounts/1234.json','w') as f:
    json.dump(acc_dic,f)

# 讀取json文件
with open('accounts/1234.json','r') as f:
    data=json.load(f)
    print(data,type(data))

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

5、MessagePack

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

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

5.1、使用方法

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM