Python3 pickle — 对象序列化
Pickle是Python中用于序列化和反序列化Python对象结构的一个标准模块。使用pickle模块的dumps
和loads
函数可以实现对象的序列化和反序列化。
以下是一些使用Python3 pickle模块进行对象序列化和反序列化的方法:
方法一:使用pickle.dumps()和pickle.loads()函数
pickle.dumps()函数可以将对象序列化,pickle.loads()函数可以将对象反序列化。
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person({self.name}, {self.age})"
person = Person("Tom", 20)
print(person) # Person(Tom, 20)
# 序列化
person_serialized = pickle.dumps(person)
print(person_serialized) # 输出二进制数据
# 反序列化
person_deserialized = pickle.loads(person_serialized)
print(person_deserialized) # Person(Tom, 20)
方法二:使用with语句和pickle.dump()和pickle.load()函数
pickle.dump()函数可以将对象序列化并写入文件,pickle.load()函数可以从文件中读取对象并反序列化。
import pickle
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person({self.name}, {self.age})"
person = Person("Tom", 20)
print(person) # Person(Tom, 20)
# 序列化并写入文件
with open('person.pkl', 'wb') as file:
pickle.dump(person, file)
# 从文件中反序列化
with open('person.pkl', 'rb') as file:
person_deserialized = pickle.load(file)
print(person_deserialized) # Person(Tom, 20)
注意:pickle模块使用了Python对象的机制来进行序列化和反序列化,这意味着序列化和反序列化的对象必须是Python支持的类型。另外,pickle模块的使用可能会带来安全风险,因为它可以序列化和反序列化任何Python对象,包括带有恶意的对象。因此,在不可信的数据上使用pickle时应格外小心。
评论已关闭