前言
今天的故事从持久化开始,最早知道持久化这个是上历史课上,太祖论断的xxx持久化,从此持久化就是一个高端、大气、上档次的词语。后来转行当程序员,老是听小伙伴说数据持久化,不明觉厉,不过因为懒,也没去搞明白是啥意思!今天刚好想学习pickle的知识,看到了持久化一词,去查了一下,哦,原来如此,妙不可言——果然是假大空!我已经浅薄地理解为把数据存储起来!
之前在python基础里面我们有谈到过python文件读写,其实就是一种字符串的持久化方式。那么我们可以把数据想办法装换为字符串,就可以实现数据的持久化。那么有没有更好的方式呢?当然有啦,今天一起学习python特有的数据持久化模块pickle。
pickle详解
- 把对象存储到文件中
pickle.dump(obj, file[, protocol])
其中file是文件对象,open(file_name, "wb"), 以二进制格式写入
# 定义对象
a = [1, 2, 3, 4]
# 存储到a.pkl
pickle.dump(a, open("a.pkl", "wb"))
- 加载存储的pickle文件:
pickle.load(file)
其中file是文件对象,open(file_name, "rb"), 以二进制格式读取
a = pickle.dump(open("a.pkl", "rb"))
print(a) # 输出 [1, 2, 3, 4]
- pickle还能就像序列化,把数据转化为pickle二进制的bytes,对应的方法是
pickle.dumps(obj), pickle.loads(obj)
- 对于pickle,数据写入是什么类型,加载后就是什么类型,特别简单方便。pickle支持存储自定义类型,但是加载的时候自定义数据类型必须import或者加载类 [1]。
写在最后
pickle的口号是,一切都对象皆可持久化,简单方便直接暴力美啊,大家有什么想存储的对象,赶紧用pickle吧!pickle还有一个小兄弟json,它能对json格式对象进行持久化或者加载,json格式文件在很多语言都是通用的,所以处理json文件时候建议使用json模块。类似numpy里面也定义了save持久化的函数,但是底层其实是使用的pickle方法...
名词解释
- 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。)
- 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。