关于python:Python2.7:尝试腌制一组自定义对象

Python2.7: Trying to pickle set of custom objects

我有点像Python皮,所以请多多包涵。我有一组自定义类,每个自定义类基本上都package了一些功能并将其添加到已转换为numpy.ndarray的图像文件中。由于每次脚本运行都需要大约2分钟的时间来创建所有这些对象,因此我希望创建一个列表并对其进行腌制。酸洗似乎进展顺利;脱酸失败。

这就是我正在做的事情:

酸洗

1
2
3
4
5
6
7
8
9
10
        frame_jar_file = open(os.path.join(asset_path,"frame_jar.pkl"),"w+")
        for x in range(1, 500):
            path = os.path.join(img_path,"{0}.jpg".format(str(x).zfill(8)))
            surface = NumpySurface(path)
            self.scene_surfaces.append(surface)

        frame_jar = cPickle.Pickler(frame_jar_file, -1)  # have tried this with no protocol arg as well
        frame_jar.dump(self.scene_surfaces)
        frame_jar_file.close()
        exit()

产生一个大小约为2gb的文件,考虑到数据,这对我来说似乎是正确的。

解酸

1
self.scene_surfaces = cPickle.Unpickler(os.path.join(asset_path,"frame_jar.pkl"))

引发此错误:

1
TypeError: argument must have 'read' and 'readline' attributes

您需要传入一个打开的文件对象,而不是文件名:

1
2
3
with open(os.path.join(asset_path,"frame_jar.pkl"), 'rb') as infh:
    unpickler = cPickle.Unpickler(infh)
    self.scene_surfaces = unpickler.load()

我还假设您要加载数据,而不仅仅是创建一个unpickler。