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>
posted @ 2022-11-09 16:41  Duosg  阅读(29)  评论(0编辑  收藏  举报