2017-02-26 125 views
1
file1 = open('/path/to/file1.txt', "r") 
file2 = open('/path/to/file2.txt', "wa") 
counter = 1 

for line in file1: 
    new_string = str(counter) + '\t' + line 
    file2.write(new_string) 
    counter += 1 

我想將一個數字添加到文件中每行的開頭,並將此行逐行添加到新文件中。原始文件中有1189行文本,儘管進行了多次嘗試,但新文件中只有1168行。這是怎麼回事?python從文件中讀取寫入其他文件

我添加了一個打印語句(print str(counter)+「」+ line),原始文件中的所有行都打印出來,並在它們旁邊打印出預期的數字。循環運行後,計數器變量爲1190。

編輯: 在循環工作後插入file2.close(),所有1189行現在都在第二個文件中,但是爲什麼?

+0

爲什麼?你必須關閉文件,這是怎麼回事。當關閉文件時,表明您已完成工作,因此操作系統可以將所有更改「提交」到磁盤。換一種方式來看,如果沒有「關閉」聲明,每次寫入內容時,程序都必須寫入磁盤,這顯然是效率低下的。 – mosh442

+0

我可以理解,如果我們不關閉額外​​的信息可能會被寫入文件,但爲什麼信息會被刪除? – schnimmy

+0

這裏的關鍵是沒有刪除任何信息。當你的代碼執行file2.write(new_string)時,這個寫入不會進入文件。它進入緩衝區,然後刷新到文件。如果您不關閉文件,則可能會丟失緩衝區。 – mosh442

回答

1

您是否關閉了正在寫入的文件,即在循環後執行file2.close()

+0

不,我不這樣做,如果有21條線路丟失,怎麼會有影響? – schnimmy

+0

嘗試關閉文件,以便刷新所有文件緩衝區。 – lukeg

+0

它的工作!爲什麼?? – schnimmy

1

您的file1file2指向您提供的代碼示例中的同一個文件。

+0

是的,我複製和粘貼的路徑,但我絕對使用不同的文件 – schnimmy