下面是详细的攻略:
1. pickle是什么?
pickle是python标准库中实现数据序列化和反序列化的模块,pickle模块的核心就是把各种类型的对象序列化(也就是保存到文件中),然后在需要的时候将其反序列化。
2. pickle序列化class需要注意什么?
在pickle序列化一个class时,需要注意以下几点:
- class中的数据成员都应该是类似int、string、list、dict这样的基本数据类型,pickle不支持对class的函数和方法进行序列化。
- 序列化时需要调用pickle.dump()方法,反序列化时需要调用pickle.load()方法。
3. 如何pickle序列化一个class?
以以下class为例进行序列化:
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
要实现对这个class的序列化,需要按照以下步骤进行:
- 导入pickle模块
python
import pickle
- 将class对象实例化出来
python
p1 = Person('Tom', 20, 'Beijing')
- 打开文件,使用pickle.dump()方法进行序列化
python
with open('person.pkl', 'wb') as f:
pickle.dump(p1, f)
4. 如何反序列化一个pickle序列化的class?
反序列化一个pickle序列化的class,需要按照以下步骤进行:
- 导入pickle模块
python
import pickle
- 打开文件,使用pickle.load()方法进行反序列化
python
with open('person.pkl', 'rb') as f:
p2 = pickle.load(f)
-
此时p2就是一个已经反序列化的Person对象
-
打印p2对象中的属性
python
print(p2.name, p2.age, p2.address)
完整的示例代码:
import pickle
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
p1 = Person('Tom', 20, 'Beijing')
with open('person.pkl', 'wb') as f:
pickle.dump(p1, f)
with open('person.pkl', 'rb') as f:
p2 = pickle.load(f)
print(p2.name, p2.age, p2.address)
输出结果:
Tom 20 Beijing
另外,还可以用pickle实现序列化和反序列化多个对象,只需要在文件中依次写入每个对象,反序列化时也是依次读取即可。下面是一个实现多个Person对象序列化和反序列化的示例代码:
import pickle
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
p1 = Person('Tom', 20, 'Beijing')
p2 = Person('Jack', 22, 'Shanghai')
p3 = Person('Mary', 19, 'Guangzhou')
p_list = [p1, p2, p3]
with open('persons.pkl', 'wb') as f:
for p in p_list:
pickle.dump(p, f)
with open('persons.pkl', 'rb') as f:
while True:
try:
p = pickle.load(f)
print(p.name, p.age, p.address)
except EOFError:
break
输出结果:
Tom 20 Beijing
Jack 22 Shanghai
Mary 19 Guangzhou
这就是使用pickle序列化class的完整攻略,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3.6使用pickle序列化class的方法 - Python技术站