2014-11-06 13 views
0

我是一個python nub,所以忍受着我。我有一組自定義類,每個類都基本上包裝併爲圖像文件添加了一些功能,該圖像文件已被轉換爲numpy.ndarray。由於每次運行腳本需要大約2分鐘的時間才能創建所有這些對象,因此我希望能夠創建它們的列表並醃製該列表。酸洗似乎進行得很順利;取出失敗。Python2.7:試圖泡菜一套自定義對象

這是我做的:

酸洗

 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 

回答

1

你需要一個打開的文件對象來傳遞,而不是文件名:

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

我也假設你想要t加載數據,而不僅僅是創建一個unpickler。

+0

/facepalm對。所以我不能解開一個字符串,基本上,就是你說的。所有的嘆息。謝謝。 :) – Jonline 2014-11-06 15:40:53

+1

@Jonline:unpickler無法從字符串讀取pickle數據。 :-) – 2014-11-06 15:41:13