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', '机器学习')
可以看到,相关数据已经成功恢复。