python序列化與反序列
阿新 • • 發佈:2019-03-09
支持 pre 數據 open 編程語言 轉換 name 持久 ima
python序列化與反序列
在python中提供了兩個模塊可進行序列化。分別是pickle和json。他們兩者的功能都差不多,dumps和dump都是進行序列化,而loads和load則是反序列化。
模塊1:pickle
pickle是python中獨有的序列化模塊。有個特別的名字,為泡菜。用於實現Python數據類型與Python特定二進制格式之間的轉換。
1. .dumps()和.loads()為格式處理函數
import pickle
#序列化 d = dict(name=‘Bob‘, age=20, score=88) c = pickle.dumps(d) #dumps將所傳入的變量的值序列化為一個bytes, 就可以將這個bytes寫入磁盤或者進行傳輸。 print(c)
#反序列化
c1 = pickle.loads(c) #把bytes loads為python對象 print((c1))
運行結果:
2..dump()和.load()主要用來讀寫json文件函數
import pickle #寫 f = open(‘2.txt‘,‘wb‘) d = dict(name=‘Bob‘, age=20, score=88) pickle.dump(d,f) #以二進制文件寫入2.txt中print(d) f.close() #讀 f1 = open(‘2.txt‘,‘rb‘) r = pickle.load(f1) #讀出文件內容 print(r)
這裏就不上圖了。
模塊2:json
大部分編程語言都會提供處理json數據的接口,用於實現Python數據類型與通用(json(其他編程語言))字符串之間的轉換
直接上源碼
1.json.dumps()和json.loads()是json格式處理函數
import json #序列化 d = dict(name=‘Bob‘, age=20, score=88) d1 = json.dumps(d) #dumps方法是把pyhon對象轉化為json對象 (轉為字符串) print(type(d1)) print(d1) #反序列化 d2 = json.loads(d1) #loads方法是把json對象轉化為python對象 (字符串轉為python對象) print(type(d2)) print(d2)
運行結果:
2.json.dump()和json.load()主要用來讀寫json文件函數
import json #寫操作 json_info = "{‘name‘: ‘Bob‘, ‘age‘: 20, ‘score‘: 88}" #字符串 也可以是上面代碼的d2變量 file = open(‘1.json‘,‘w‘,encoding=‘utf-8‘) #創建(打開)一個可寫的1.json文件 json.dump(json_info,file) #將json信息寫入文件中 #讀操作 file = open(‘1.json‘,‘r‘,encoding=‘utf-8‘) info = json.load(file) #讀取json信息 print(info)
這裏我就不上圖了 都差不多的
總結:
pickle與json都可以實現序列化以及反序列化,它們之間不同的有以下幾點:
1)、pickle不是用於多種語言間的數據傳輸,它僅作為python對象的持久化,只針對python的數據類型;而json可以支持更多語言的序列化和反序列化,在python中序列化一個自定義的類對象時,會拋出一個 TypeError。
2)、json的序列化輸出是文本對象是str類型,而pickle序列化的輸出是二進制字節-bytes。
3)、json可讀性優於pickle。
python序列化與反序列