2014-09-04 95 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