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;
# 一般來說json編碼的數據很少落地,數據都是通過網絡傳輸;傳輸的時候,就要考慮壓縮它;本質來說它就是個文本,就是字符串;
5、MessagePack
# MessagePack是一個基於二進制高效的對象序列化類庫,可以用於跨語言通訊;
# 它可以像JSON一樣,在多種語言之間交互結構對象;但是它比JSON更快也更輕巧;兼容json和pickle;
5.1、使用方法
# 1、先要通過pip安裝模塊, pip install msgpack-python;
# 2、由於它是基於二進制格式,所以在dump()和load()的時候操作文件要以wb和rb模式;
Python學習之-序列化與反序列化