序列化作用

  • 可以实现对象,比如列表,字典永久储存,而不用转成字符串后储存为文本。
  • 可以让对象边运行边储存,实现持久化运行,减少转化步骤和时间

反序列化作用

  • 可以让序列化的内容转化成对象直接使用。
  • 反序列化不需要再转格式,保证了对象的真实可靠性

使用方法

  • 先导入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'>
"""
最后修改日期:2020年9月15日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。