【发布时间】:2011-04-07 11:19:41
【问题描述】:
我有一个包含腌制对象的巨大文件,让我们假设:
for object in objects:
pickle.dump(myfile,object)
虽然对象类型相同,但大小不同。
该文件在不同的场合被填满了很长时间,但有时,当转储过程重新启动时,我需要读取最后一个对象。
像这样的:
myfile.seek(-1000,2)
while myfile.tell() < mysize:
objects.append(pickle.load(myfile))
现在,这显然不起作用,因为 -1000 通常不在其中一个对象的开头,并且 pickle 会引发异常等...
虽然我可以尝试 except:pass 并让 pickle 失败,直到它找到可以选择的东西,但我不太喜欢这个想法,我怀疑它确实在某些读取尝试中过度推进了文件,我可能会丢失一些对象。
从头开始读取文件不是一个选项,因为它的大小。
对此有何想法?有没有办法让pickle检查当前文件光标是否指向看起来像对象的东西?
【问题讨论】:
-
你为什么不用
shelve?