Python基础实例教程(微课版)
上QQ阅读APP看书,第一时间看更新

2.5 对象

Python对象

2.5.1 Python中的对象

Python的内置对象类型主要有数字、字符串、列表、元组、字典、集合等。其实,在Python中,一切皆为对象,后面会给大家讲解面向对象的知识。

在Python中,如果有一些对象需要持久性存储,并且保证这个对象的类型与数据不会丢失,则需要将这些对象进行序列化。

序列化之后,需要使用的时候,再恢复为原来的数据。

序列化的这种过程称为pickle(腌制)。

pickle中的方法主要有:

(1)dumps(object);

(2)loads(string);

(3)dump(object,file);

(4)loads(file)。

2.5.2 Python对象使用应用实例

接下来将进一步讲解pickle相关的知识。

如果需要将某个对象进行序列化,可以使用pickle下面的dumps(object)方法。

比如,现在有一个列表对象lista,里面有一些元素,该列表对象如下所示:

lista=["Python","PHP","机器学习"]

如果需要将该列表对象进行序列化,可以通过以下代码进行:

#pickle腌制 
import pickle 
#dumps(object)将对象序列化 
lista=["Python","PHP","机器学习"] 
listb=pickle.dumps(lista) 
print(listb) 

此时,程序的输出结果如下:

b'\x80\x03]q\x00(X\x06\x00\x00\x00Pythonq\x01X\x03\x00\x00\x00PHPq\x02X\x0c\x00\x00\x00\xe6\x9c\xb a\xe5\x99\xa8\xe5\xad\xa6\xe4\xb9\xa0q\x03e.'

可以看到,该列表对象lista已经序列化成功,并将序列化后的结果赋给了listb。

如果希望将序列化后的对象原样恢复,可以使用loads(string)方法实现。

比如,可以使用如下程序将上面序列化后的结果进行恢复,完整程序如下:

#pickle腌制 
import pickle 
#dumps(object)将对象序列化 
lista=["Python","PHP","机器学习"] 
listb=pickle.dumps(lista) 
#loads(string)将对象原样恢复,并且对象类型也恢复为原来的格式
listc=pickle.loads(listb) 
print(listc) 

程序的输出结果为:

['Python', 'PHP', '机器学习']

可以看到,对应的对象数据已经恢复成功。

如果希望将对象序列化并直接存储到某个文件中,可以使用dump(object,file)方法进行。

比如,希望将元组对象t1=('Python', 'PHP', '机器学习')序列化并直接存储到某个文件中(比如D:/t1.pk1),可以通过如下代码实现:

#pickle腌制 
import pickle 
#dump(object,file),将对象序列化并存储到文件里面
t1=('Python', 'PHP', '机器学习') 
f1=open('D:/t1.pk1','wb') 
pickle.dump(t1,f1,True) 
f1.close() 

执行该代码后,会发现在D盘下出现了一个名为t1.pk1的文件,如图2-1所示。

图2-1 序列化执行后生成的文件

如果希望将对应的数据恢复,可以通过load(object,file)方法实现,具体程序实现如下:

#pickle腌制 
import pickle 
#load(object,file)将dump()存储在文件里面的数据恢复
f2=open('D:/t1.pk1','rb') 
t=pickle.load(f2) 
print(t) 
f2.close() 

此时程序的执行结果如下:

('Python', 'PHP', '机器学习')

可以看到,相关数据已经成功恢复。