python中的pickle模块

python3手册详解:https://docs.python.org/zh-cn/3.7/library/pickle.html?highlight=pickle#module-pickle

 

本次主要使用pickle模块将下载的序列化图像信息读出来,转变为bytes编码。

def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

 

记录一下学习:

  tensorflow提供TFRecord统一存储数据,将图像数据和标签放在一起的二进制文件(protocol buffer),以此更好的利用内存,实现快速复制、移动、读取以及存储。

  Python提供的pickle模块就很好地解决了这个问题,它可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作。

1、pickle.dump(object, file, protocol=)  将object对象序列化到打开的文件夹file中。protocol是序列化协议,默认是0,如果是负数或者HIGHEST_PROTOCOL,则使用最高版本序列化协议。

 

2、pickle.load(file,encoding)  把file中的对象读出,encoding 参数可置为 'bytes' 来将这些 8 位字符串实例读取为字节对象。

 

3、pickle.dumps(obj,protocol=None) 将 obj 打包以后的对象作为 'bytes'类型直接返回,而不是将其写入到文件。

 

4、pickle.loads(bytes_object)  对于打包生成的对象 bytes_object,还原出原对象的结构并返回。

dump() 和 load() 与 dumps() 和 loads()的区别 dump()函数能一个接着一个地将几个对象序列化存储到同一个文件中,随后调用load()来以同样的顺序反序列化读出这些对象。

import pickle
import os
listdata = [[1,2,3],
            [2,3,4],
            [5,6,7]]

# f = "{}/{}".format(r"./practice_data",r"pra.txt")
#
# if not os.path.exists(f):
#     os.md(f)
#将数据序列化
fw = open(r"practice_data/pra.txt",'wb')
pickle.dump(listdata,fw,-1)
fw.close()
#将序列化数据读出
fr = open(r"practice_data/pra.txt",'rb')
fd = pickle.load(fr)
print(fd)
fr.close()

#使用dumps和loads举例
a = pickle.dumps(listdata)
print(pickle.loads(a))

 输出:

[[1, 2, 3], [2, 3, 4], [5, 6, 7]]
[[1, 2, 3], [2, 3, 4], [5, 6, 7]]

  

posted @ 2019-12-15 22:23  也许明天、  阅读(789)  评论(0)    收藏  举报