2016-04-19 59 views
-1

這是我的代碼python中的seek模式用於寫入而不覆蓋?

fo = open("foo.txt", "r") 
a = fo.readlines(); 
fo1 = open("write.txt", "w") 
j=len(a) 
print j 
i=0 


while i < j: 

    if (a[i] == "hi\n"): 

     fo1.write('hi\nhow\nare\nyou'); 

     if (a[i] == "hello\n"): 

     fo1.seek(-3, 2) 
     fo1.write('\nalways\nnot\n'); 

     i += 1 


     fo.close() 
     fo1.close() 

有兩個文本文件

1)foo.txt的 - 包含

hi 
hello 

2)write.txt是空白文件

它檢查a [i]打招呼,因爲它是你好,它會執行這個語句的代碼

fo1.write('hi\nhow\nare\nyou'); 

所以,write.txt會是這樣

how 
are 
you 

之後,它會檢查它有[i]爲喜 ,因爲它是喜,它將從端將指針移動到-3和將寫這個代碼語句

fo1.write('\nalways\nnot\n'); 

輸出應該像

How 
are 
always 
not 
you 

電流輸出我得到的是

How 
are 
always 
not 

以上輸出已經得到了「你」刪除 預期輸出是這

How 
are 
always 
not 
you 

我沒試過追加寫模式,兩者都是一樣的

因此,我如何寫而不覆蓋?

+3

儘管您可能會對文本編輯器和Microsoft Word的體驗有所期待,但是沒有用於文件編寫的「插入模式」。 – user2357112

+0

事實上,您最大的希望就是緩存文檔的底部,添加新文本並重新粘貼。但是,這對大文件來說會很慢。 – Rockybilly

回答

1

問題是,你正在等待寫入在當前位置插入。設置文件位置時,它將開始在該位置寫入並覆蓋數據。

爲了防止覆寫,您需要重新寫入數據後的數據你寫

fo1.seek(-3, 2) 
end_data = fo1.read() 
fo1.seek(-3, 2) 
fo1.write('\nalways\nnot\n') 
fo1.write(end_data) 

而且,你不需要在Python中使用分號。

+0

非常感謝,它的工作,你救了我們的屁股!!!再次感謝! – Basil