pickle序列化模块
pickle序列化模块
优势:能够序列化python中所有类型
缺点:只能在python中使用
pickle运用的场景:产生一个对象保存到文件中,取出来还是一个对象
# 比如类C1产生了一个对象obj,如何将obj保存在文件中,而且可以读取出来obj
class C1:
def __init__(self, name, age):
self.name = name
self.age = age
def func1(self):
print('from func1')
def func2(self):
print('from func2')
obj = C1('duoduo', 12)
print(type(obj)) # <class '__main__.C1'>
1.直接写
直接用write方法去写入文件中,由于write方法的参数为要写入的数据,需要是字符串str类型,或者是bytes类型,而对象并不是字符串类型数据
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write(obj)
# 报错:TypeError: write() argument must be str, not C1
2.使用json序列化
json无法序列化类产生的实例
import json
with open(r'a.txt', 'w', encoding='utf8') as f:
json.dump(obj, f)
# TypeError: Object of type C1 is not JSON serializable
3.使用pickle模块
使用pickle读取对象的前提:pickle模块去读取文件中的对象,在调用pickle的文件中必须要有生成该对象的类
# pickle可以把对象存入文件中,也可以从文件中读取出来
import pickle
# 写入
with open(r'a.txt', 'wb') as f:
pickle.dump(obj, f)
# 读取
with open(r'a.txt', 'rb') as f:
res = pickle.load(f)
print(res) # <__main__.C1 object at 0x10454bdc0>