序列化是指把內存裏的數據類型轉變成字符串。以使其能存儲到硬盤或經過網絡傳輸到遠程。——硬盤或網絡傳輸時只能接受bytes。python
Python中用於序列化的兩個模塊:json
json和pickle模塊都提供了四個功能:dumps、dump、loads、load網絡
# 把內存數據轉成字符,叫作序列化 data = { 'roles':[ {'role':'monster','type':'pig'}, {'role':'hero','type':'關羽'} ] } f = open("game_status","w") # f.write(data) # 寫入失敗,write只能接收字符串或者是bytes f.write(str(data)) # 內容寫入文件中
# 把字符轉成內存數據類型,叫作反序列化 f = open("game_status","r") d = f.read() d = eval(d) print(d['roles'])
把數據類型轉成字符串存到內存裏的意義:函數
一、把你的內存數據經過網絡共享給遠程其餘人spa
二、定義了不一樣語言之間的交互規則設計
純文本:不能共享複雜的數據類型code
xml:佔空間大xml
json:相對來講,簡單且可讀性好。對象
import json data = { 'roles':[ {'role':'monster','type':'pig'}, {'role':'hero','type':'關羽'} ] } d = json.dumps(data) # 僅轉爲字符串,能夠存入硬盤 print(d,type(d)) """ 輸出:{"roles": [{"role": "monster", "type": "pig"}, {"role": "hero", "type": "\u5173\u7fbd"}]} <class 'str'> """ f = open("test.json","w") # 建立文件對象 d1 = json.dump(data,f) # dump不只將數據變爲字符串還直接寫入文件,可是隻能存入文件對象中 d2 = json.loads(d) # 僅把字符串轉爲相應的數據類型 print(d2['roles'],type(d2)) """ 輸出:[{'role': 'monster', 'type': 'pig'}, {'role': 'hero', 'type': '關羽'}] <class 'dict'> """ # 從文件中讀入: f = open("test.json","r") data = json.load(f) print(data['roles'])
import pickle d = {'name':'alex','age':22} l = [1,2,3,4,'rain'] pk = open("data.pkl","wb") # 針對bytes內容必須配置爲wb模式 print(pickle.dumps(d)) # b'\x80\x03}q\x00(X\x04\x00\x.... bytes類型 pickle.dump(d,pk) """ data.pkl文件內容:�}q(XnameqXalexqXageqKu. 文件格式不可直接讀。 """ f = open("data.pkl","rb") d = pickle.load(f) print(d) """ 輸出:{'name': 'alex', 'age': 22} """ def sayhi(): print('dddddd') pickle.dumps(sayhi) """ 執行不報錯,說明pickle能夠支持函數序列化 """
json:blog
優勢:跨語言、體積小
缺點:只能支持int\str\list\tuple\dict
pickle:
優勢:專爲Python設計,支持Python全部的數據類型。
缺點:只能在Python中使用,存儲數據佔空間大。