序列化作用
- 可以实现对象,比如列表,字典永久储存,而不用转成字符串后储存为文本。
- 可以让对象边运行边储存,实现持久化运行,减少转化步骤和时间
反序列化作用
- 可以让序列化的内容转化成对象直接使用。
- 反序列化不需要再转格式,保证了对象的真实可靠性
使用方法
- 先导入pickle模块
- 使用dump将对象序列化成二进制文件
- 使用load将二进制文件反序列化为对象
import pickle
dict1 = {'key1': 'value1'} # 定义一个简单字典
f = open('001.pkl', 'wb') # pkl为pickle文件的后缀
pickle.dump(dict1, f) # 将dict1序列化到001.pk1文件中
f.close()
# 结果会生成一个001.pkl文件
import pickle
f = open('001.pkl', 'rb')
dict2 = pickle.load(f)
print(dict2)
print(type(dict2))
f.close()
"""
{'key1': 'value1'}
<class 'dict'>
"""
- 通过序列化和反序列化,可以让对象的内容和类型均不发生改变,这样就可以让对象运行、对象本地储存同时进行,实现可持续化运行。
- dump方法用于本地储存,dumps则不储存,而是直接查看序列化后的二进制内容。
- load方法用于本地文件加载,而loads则用于pickle二进制内容转python对象。
import pickle
dict1 = {'key1': 'value1'}
b1 = pickle.dumps(dict1)
with open('001.pkl', 'wb') as f:
f.write(b1)
import pickle
f = open('001.pkl', 'rb')
str1 = f.read() # 以二进制方式读取其内容
dict1 = pickle.loads(str1) # 二进制转对象
print(dict1)
print(type(dict1))
f.close()
"""
# 输出结果
{'key1': 'value1'}
<class 'dict'>
"""
json序列化和反序列化
- pickle用于对象转二进制文件的序列化,json则用于对象转文本后的序列化
- 使用json.dump可以将对象转文本文件的序列化
- 使用json.load可以将文本文件转对象格式的反序列化
import json
dict1 = {'key1': 'value1'}
f = open('001.json', 'wt') # 以文本模式打开
json.dump(dict1, f)
f.close()
# 运行结束后,将会多出一个001.json文件
import json
f = open('001.json', 'rt') # 以文本读取模式打开
dict1 = json.load(f)
print(dict1)
print(type(dict1))
f.close()
# 输出结果
"""
{'key1': 'value1'}
<class 'dict'>
"""
- 同样的json.dumps用于将对象转成文本内容(序列)
- json.loads用于将文本内容转成对象(反序列)
import json
dict1 = {'key1': 'value1'}
str1 = json.dumps(dict1)
f = open('001.json', 'wt') # 以文本模式打开
f.write(str1)
f.close()
# 运行结束后,将会多出一个001.json文件
import json
f = open('001.json', 'rt') # 以文本模式打开
str1 = f.read()
dict1 = json.loads(str1)
print(dict1)
print(type(dict1))
f.close()
# 输出结果
"""
{'key1': 'value1'}
<class 'dict'>
"""
留言