Python2.7:尝试pickle一组自定义对象

Python2.7:尝试pickle一组自定义对象,python,pickle,Python,Pickle,我有点像巨蟒,所以请容忍我。我有一组自定义类,每个类基本上包装并向已转换为numpy.ndarray的图像文件添加一些功能。由于每次运行脚本时都需要大约2分钟来创建所有这些对象,因此我希望创建一个对象列表并对该列表进行pickle处理。酸洗似乎进行得很顺利;解扣失败了 这就是我所做的: 酸洗 frame_jar_file = open(os.path.join(asset_path, "frame_jar.pkl"), "w+") for x in range(1

我有点像巨蟒,所以请容忍我。我有一组自定义类,每个类基本上包装并向已转换为
numpy.ndarray
的图像文件添加一些功能。由于每次运行脚本时都需要大约2分钟来创建所有这些对象,因此我希望创建一个对象列表并对该列表进行pickle处理。酸洗似乎进行得很顺利;解扣失败了

这就是我所做的:

酸洗

        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()
self.scene_surfaces = cPickle.Unpickler(os.path.join(asset_path, "frame_jar.pkl"))
生成一个大小约为2gb的文件,在给定数据的情况下,这对我来说似乎是正确的

取消勾选

        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()
self.scene_surfaces = cPickle.Unpickler(os.path.join(asset_path, "frame_jar.pkl"))
引发此错误:

TypeError: argument must have 'read' and 'readline' attributes
您需要传入打开的文件对象,而不是文件名:

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

我还假设您希望加载数据,而不仅仅是创建一个取消勾选器。

/facepalm Right。所以我不能解开一根线,基本上,这就是你说的。所有的叹息。谢谢。:)@Jonline:取消pickler无法从字符串中读取pickle数据。:-)