我是一个蟒蛇小块,所以忍受我。我有一组自定义类,每个类基本上都包装并向已转换为numpy.ndarray
的图像文件添加一些功能。由于每次运行脚本时都需要大约2分钟来创建所有这些对象,因此我希望创建它们的列表并对该列表进行pickle。酸洗似乎进展顺利; unpickling失败。
这就是我正在做的事情:
酸洗
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的文件,考虑到数据,这似乎对我来说是正确的。
取储存
self.scene_surfaces = cPickle.Unpickler(os.path.join(asset_path, "frame_jar.pkl"))
引发此错误:
TypeError: argument must have 'read' and 'readline' attributes
答案 0 :(得分:1)
您需要传入打开的文件对象,而不是文件名:
with open(os.path.join(asset_path, "frame_jar.pkl"), 'rb') as infh:
unpickler = cPickle.Unpickler(infh)
self.scene_surfaces = unpickler.load()
我还假设你想加载数据,而不仅仅是创建一个unpickler。