python中的序列化與反序列化
阿新 • • 發佈:2018-02-28
tmp 數據類型 load 一個 port style pick 序列 spa
之前,在學習python時,一直弄不明白pickle和json模塊的序列化和反序例化之間的區別和用法,最近閑來有時間,重新研究了這兩個模塊,也算是基本搞明白他們之中的區別了。
用於序列化的兩個模塊,
- json,用於字符串 和 python數據類型間進行轉換
- pickle,用於python特有的類型 和 python的數據類型間進行轉換
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
看下面這個例子,或許你能明白他們之間的區別
import pickle data = [‘aa‘, ‘bb‘, ‘cc‘] # dumps 將數據通過特殊的形式轉換為只有python語言認識的字符串 p_str = pickle.dumps(data) print(p_str) # loads 將pickle數據轉換為python的數據結構 mes = pickle.loads(p_str) print(mes) # dump 將數據通過特殊的形式轉換為只有python語言認識的字符串,並寫入文件 with open(‘tmp.pw‘,‘wb‘) as f: pickle.dump(data,f) # load 從數據文件中讀取數據,並轉換為python的數據結構 with open(‘tmp.pw‘,‘rb‘) as f: print(pickle.load(f))
json和pickle模塊中的dump和load操作其實就是對數據進行編碼和解碼的處理
- 編碼:把一個Python對象編碼轉換成Json字符串 json.dumps()
- 解碼:把Json格式字符串解碼轉換成Python對象 json.loads()
python中的序列化與反序列化