python中的pickle模块

pickle和cPickle

最近在Dex-Net的源码中看到他们使用cPickle模块进行数据的缓冲,于是决定学习一下pickle模块
cPickle模块是python2标准库中自带的,在python3中变成了pickle,模块在标准库中API文档如下

https://docs.python.org/3/library/pickle.html

其中详细介绍了该模块的使用方法,pickle主要用来存储python对象,pickle把python对象存储为二进制字节流的形式,相比使用json,pickle可以对任意的python对象进行存储,包括自己定义的python对象。
要使用这个模块主要有以下四个接口函数。

  1. pickle.dump(obj, file, protocol=None, *, fix_imports=True)
    把python对象写入一个文件,file是一个打开文件,必须拥有单字节的write()方法。
import pickle

# An arbitrary collection of objects supported by pickle.
data = {
    'a': [1, 2.0, 3, 4+6j],
    'b': ("character string", b"byte string"),
    'c': {None, True, False}
}

with open('data.pickle', 'wb') as f:
    # Pickle the 'data' dictionary using the highest protocol available.
    pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
  1. pickle.dumps(obj, protocol=None, *, fix_imports=True)
    把python对象转换为pickle字节流并返回,而不是写入文件
  2. pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
    从文件中加载一个python对象,该文件必须拥有read()和readline()方法,在解析numpy数组时需要设置encoding=‘latin1’,更多细节见API文档
import pickle

with open('data.pickle', 'rb') as f:
   # The protocol version used is detected automatically, so we do not
   # have to specify it.
   data = pickle.load(f)
  1. pickle.loads(bytes_object, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)
    从一个字节流对象中加载一个python对象

你可能感兴趣的:(python基础)