Python - 构建类似于另一个pickle文件的文件

时间:2017-03-24 04:33:24

标签: python pickle

我有this pickled file(29.60 MB),并希望腌制另一个与其结构类似的文件。

我有以下脚本来取消文件:

import _pickle as cPickle 

def unpickle(file):
    fo = open(file, 'rb')
    dict = cPickle.load(fo, encoding='latin1')
    fo.close()
    return dict

content = unpickle('batch')
output_file = open('content.txt', 'w')
output_file.write(str(content))

我想问的是:

1。我有两张图片,一张名为image1.jpg,另一张为image2.jpg,其中image1.jpg的标签为1image2.jpg会有2标签。

基于上面的文件,pickle文件会是什么样子(如果你能亲自演示的话)?

2. 我如何编写一个Python代码来腌制与上述文件类似的结构中的数据?

感谢。

1 个答案:

答案 0 :(得分:1)

这很简单。 Pickle lib函数与任何其他数据序列化lib类似,例如json,具有能够(解)序列化本机Python对象的额外功能。

如果您有一个想要与示例文件类似地进行腌制的字典,只需调用pickle.dump(my_dict)etvoilà,您就可以将二进制数据写入文件。

如果你问的是pickle文件的结构如何,请按照以下方式:你有一个带有四个键的dict:

>>> pickled_dict.keys()
['data', 'labels', 'batch_label', 'filenames']
  • 'labels'是0-9范围内10000个数字的列表。
  • 'batch_label'是字符串'训练批次1的5'。
  • 'filenames'是10000个字符串(图像文件名)的列表。
  • 'data'是一个包含10000个数组的数组,每个数组都是可变大小的8位无符号整数。它是一个numpy.ndarray对象(numpy是一个用于操作二进制/数字数据矩阵的python库),我想这应该指示你如何首先加载“图像” - 可能只是以二进制模式加载并写入char by char成一个数组,但我只能猜到这里。

通过模拟此dict构建您自己的批次。 如果您需要知道我是如何获得这些数据的,那么只需使用您的depickle代码并在去除腌制的对象上调用__class__keys()len(),而不是将其写回一个文件(我猜想,数据部分失败了。)

希望这会有所帮助。