2014-09-04 31 views
3

cPickle.dump(object,file)始终在文件末尾转储。有没有办法在文件中的特定位置转储?我希望下面的代码片段工作cPickle.dump始终在文件末尾倾销

file = open("test","ab") 
file.seek(50,0) 
cPickle.dump(object, file) 
file.close() 

然而,上面的代码中转储的对象在文件的结尾(假设文件已经包含了1000个字符),无论在哪里我所寻求的文件指针。

+0

在一个侧面说明,你应该使用'with'来打开文件 – 2014-09-04 10:26:23

回答

2

我认为这可能是更多的问题与如何打开文件比cPickleab模式除了作为追加模式(应该与您的seek不相关)之外,还提供O_TRUNC标志给系统调用的低级别open。如果你不想截断,你应该尝试r+模式。

如果这不能解决问题,YOUT和你的对象不是非常大,您仍然可以使用dumps

file = open("test","ab") 
file.seek(50,0) 
dumped= cPickle.dumps(object) 
file.write(dumped) 
file.close() 
+0

AAH!尼斯黑客!非常感谢。 – Shobhit 2014-09-04 10:26:07

+0

大对象有什么问题?事实上,我的案例中的对象确实非常大。 – Shobhit 2014-09-04 10:29:21

+0

@Shobhit问题是如果你处理的是腌制时比RAM大的对象,因为你将pickle结果存储在内存中,而不是磁盘 – goncalopp 2014-09-04 10:36:26