1. 程式人生 > >python序列化與反序列

python序列化與反序列

支持 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序列化與反序列