序列化与反序列化
- 序列化: 将【其他形式数据】转换成【字符串】的过程成为序列化
- 反序列化: 将【字符串】转换成【其他形式数据】的过程称为反序列化
Python中用于序列化的两个模块
- json 用于【字符串】和 【python基本数据类型】 间进行转换
- pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换
Json和pickle模块都提供了四个功能:dumps、dump、loads、load 但略有差异。
Json和pickle的区别:
json 是所有语言都通用,但json只能支持简单的数据类型。
pickle 是Python所特有的类型,它可以处理一些复杂的数据类型。
- pickle.dumps()
将数据通过特殊的形式转化为只有python语言认识的字符串
#pickle
import pickle
data = {1:"you",2:"are",3:"a",4:"pig"}
data_result1 = pickle.dumps(data)
print(data_result1)
'''
pickle.dumps(data):
将数据通过特殊的形式转化为只有python语言认识的字符串
'''
输出结果:
b'x80x03}qx00(Kx01Xx03x00x00x00youqx01Kx02Xx03x00x00x00areqx02Kx03Xx01x00x00x00aqx03Kx04Xx03x00x00x00pigqx04u.'
由结果可知:pickle.dumps返回的的确是一个字符串,b 代表的事二进制的形式。
- pickle.dump()
将数据通过特殊形式转化为只有python语言认识的字符串,并写入文件
import pickle
data = {1:"you",2:"are",3:"a",4:"pig"}
with open("day4.txt","wb") as fp:
data_result = pickle.dump(data,fp)
fp.write(b"you are a pig")
print(data_result)
'''
pickle.dump(data,fp):
将数据通过特殊形式转化为只有python语言认识的字符串,并写入文件
'''
输出结果:
None
- pickle.loads()
import pickle
data = {1:"you",2:"are",3:"a",4:"pig"}
data_result1 = pickle.dumps(data) #先将字典形式的data进行序列化成字符串
s_result = pickle.loads(data_result1)#再通过loads将字符串进行反序列化,还原成字典形式的data
print(s_result)
输出结果:
{1: 'you', 2: 'are', 3: 'a', 4: 'pig'}
- pickle.load()
import pickle
data = {1:"you",2:"are",3:"a",4:"pig"}
with open("day4.txt","wb") as fp:
data_result = pickle.dump(data,fp)
#将data进行序列化
with open("day4.txt","rb")as f:
print(pickle.load(f))
#从文件读取并进行反序列化输出
输出结果:
{1: 'you', 2: 'are', 3: 'a', 4: 'pig'}
- json.dumps()
#json
import json
data = {1:"you",2:"are",3:"a",4:"pig"}
data_result1 = json.dumps(data)
print(data_result1)
print(type(data_result1))
'''
json.dumps(data):
将数据通过特殊的形式转化为所有程序语言都认识的字符串
'''
输出结果:
{"1": "you", "2": "are", "3": "a", "4": "pig"}
<class 'str'>
注意: 在Python3中所显示的转换不是很明显,但通过type可知,json.dumps已经将其序列化。
- json.dump()
import json
data = {1:"you",2:"are",3:"a",4:"pig"}
with open("day4.txt","w") as fp:
data_result = json.dump(data,fp)
fp.write("you are a pig")
print(data_result)
'''
pickle.dump(data,fp):
将数据通过特殊形式转化为所有程序语言都认识的字符串,并写入文件
'''
输出结果:
None
- json.loads()
import json
data = {1:"you",2:"are",3:"a",4:"pig"}
data_result1 = json.dumps(data) #先将字典形式的data进行序列化成字符串
s_result = json.loads(data_result1)#再通过loads将字符串进行反序列化,还原成字典形式的data
print(s_result)
print(type(s_result))
输出结果:
{'1': 'you', '2': 'are', '3': 'a', '4': 'pig'}
<class 'dict'>
由结果可知,json.loads()已将其反序列化。
- json.load()
import json
data = {1:"you",2:"are",3:"a",4:"pig"}
with open("day4.txt","w") as fp:
data_result = json.dump(data,fp)
#将data进行序列化
with open("day4.txt","r")as f:
print(json.load(f))
#从文件读取并进行反序列化输出
输出结果:
{'1': 'you', '2': 'are', '3': 'a', '4': 'pig'}
注意:在进行写|读文件时
- pickle 是以二进制写|读的,即(wb|rb)
- json 是直接写|读,即(w|r)