Python 学习笔记 -- pickle

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34611224/article/details/84304042

pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装。注意引包的时候,python2是cPickle库,python3是pickle库。

pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。

通常最一般的使用方式非常简单,比如下面就是压缩并保存一个字典的方式,字典和列表都是能被保存的:

import pickle

a_dict = {'da': 111, 2: [23,1,4], '23': {1:2,'d':'sad'}}

# pickle a variable to a file
file = open('pickle_example.pickle', 'wb')
pickle.dump(a_dict, file)
file.close()

‘wb’ 是以写的形式打开 ‘pickle_example.pickle’ 这个文件,然后 pickle.dump() 你要保存的东西去这个打开的文件,最后关闭 file 你就会发现你的文件目录里多了一个 ‘pickle_example.pickle’ 文件,该文件就是你保存的字典。

这还是比较实用的,一般预处理后的数据会以字典的形式保存下来,在训练的时候直接load就行。提取的时候相对简单点,同样我们以读的形式打开那个文件,然后 load 进一个 python 的变量。

# reload a file to a variable
with open('pickle_example.pickle', 'rb') as file:
    a_dict1 =pickle.load(file)

print(a_dict1)

在官方的介绍中,序列化操作的英文描述有好几个单词,如”serializing”, “pickling”, “serialization”, “marshalling” 或者”flattening”等,它们都代表的是序列化的意思。相应的,反序列化操作的英文单词也有好多个,如”de-serializing”, “unpickling”, “deserailization”等。为了避免混淆,一般用”pickling”/“unpickling”, 或者”serialization”/“deserailization”。

pickle模块是以二进制的形式序列化后保存到文件中(保存文件的后缀为”.pkl”),不能直接打开进行预览。而python的另一个序列化标准模块json,则是human-readable的,可以直接打开查看(例如在notepad++中查看)。

pickle模块有两类主要的接口,即序列化和反序列化。

# serializing
pickle.dump()
Pickler(file, protocol).dump(obj)

# deserializing
pickle.load()
Unpickler(file).load()

详细的介绍见文档

References:

https://www.jb51.net/article/135407.htm
https://morvanzhou.github.io/tutorials/python-basic/basic/13-08-pickle/
https://docs.python.org/3/library/pickle.html

猜你喜欢

转载自blog.csdn.net/sinat_34611224/article/details/84304042