Python硬盘序列化是指将Python对象转换为字节流,存储在硬盘上以便之后使用。它可以在程序重启后,继续使用之前存储的对象,从而避免重新计算,提高程序效率。
import pickle # 定义对象 class Student: def __init__(self, name, age): self.name = name self.age = age s = Student('Tom', 18) # 写入文件 with open('student.pickle', 'wb') as f: pickle.dump(s, f) # 读取文件 with open('student.pickle', 'rb') as f: s = pickle.load(f) print(s.name, s.age)
在以上代码中,我们先定义了一个Student类,并创建一个对象s。然后使用pickle模块将s对象序列化后写入文件"student.pickle"中。最后再使用pickle模块将文件中的字节流读取出来,反序列化为对象,并输出其名称和年龄。
需要注意的是,存储的对象需要是可序列化的,即对象的属性也必须是可序列化的。在某些情况下,某些属性需要通过特殊方式进行序列化或反序列化,比如datetime对象需要使用datetime模块中的函数。
import datetime import pickle class Employee: def __init__(self, name, hire_date): self.name = name self.hire_date = hire_date def serialize(self): return {'name': self.name, 'hire_date': self.hire_date.strftime('%Y-%m-%d')} @classmethod def deserialize(cls, data): return cls(name=data['name'], hire_date=datetime.datetime.strptime(data['hire_date'], '%Y-%m-%d').date()) e = Employee('Tom', datetime.date(2022, 1, 1)) with open('employee.pickle', 'wb') as f: data = e.serialize() pickle.dump(data, f) with open('employee.pickle', 'rb') as f: data = pickle.load(f) e = Employee.deserialize(data) print(e.name, e.hire_date)
以上代码中,我们在Employee类中定义了serialize方法和deserialize方法,用于将对象序列化为字典和从字典中反序列化,并使用了datetime模块对日期进行了特殊处理。在序列化时,先将对象转换为字典,再存储到文件中;在反序列化时,先从文件中读取字典,再将其转换为Employee对象。
本文可能转载于网络公开资源,如果侵犯您的权益,请联系我们删除。
0