有时候一个对象,想要保存到硬盘中。这种时候就可以使用对象持久化的技术,如果想要将一个对象存储到硬盘中,需要使用pickle模块中的dump方法,load方法可以从硬盘中加载一个对象。Python中许多数据结构可以直接序列化,比如列表、字典、字符串、元组、整型、集合、浮点类型、布尔类型

  1. 写入对象到硬盘:
  • 从硬盘中加载数据
  • 自定义可持续化的对象:

自己定义的类的对象默认是不能持续化的,如果需要持续化就要实现以下的两个魔术方法

__getstate__

这个魔术方法在把对象存储到硬盘中的时候会调用的,会将这个方法的返回值存储进去,返回值应该是可以持续化的数据类型,比如字典、列表、字符串等,如果不实现这个方法,pickle就不知道你的数据以什么形式存储,

__setstate__

这个魔术方法是从硬盘中加载对象的时候,会调用,会将你之前存储进去的值,通过参数的形式传递进来。

如果没有__setstate__方法中的设置属性,那么在下面的load_obj()函数里面就无法重新初始化一个data对象,注意这个data是对象

  • 关于pickle

pickle 并不是很完美, Pickle 文件很容易被不小心或者故意损坏, Pickle 文件比纯文本文件要稍微安全一点,但是还是可以被利用运行恶意程序。 Pickle 不是跨版本兼容的,所以尽量不要去分发 Pickle 过的文本,因为别人并不一定能够打开。不过在做缓存或者其他需要序列化数据的时候, Pickle 还是很有用处的。