2016-12-02 97 views
1

我試圖用Python重寫csv文件中的特定單元格。使用csv模塊重寫後的Python - CSV文件爲空

但是,無論何時嘗試修改csv文件的某個方面,csv文件最終都會被清空(文件內容變爲空白)。

最少的代碼示例:

import csv 
ReadFile = open("./Resources/File.csv", "rt", encoding = "utf-8-sig") 
Reader = csv.reader(ReadFile) 
WriteFile = open("./Resources/File.csv", "wt", encoding = "utf-8-sig") 
Writer = csv.writer(WriteFile) 
for row in Reader: 
    row[3] = 4 
    Writer.writerow(row) 
ReadFile.close() 
WriteFile.close() 

'FILE.CSV' 看起來像這樣:

1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 
1,2,3,FOUR,5 

在這個例子中,我試圖改變 '四' 到 '4'。

運行此代碼時,csv文件變爲空。

到目前爲止,我設法找到的唯一與此有關的其他問題是this one,它似乎沒有處理重寫csv文件中的特定單元格,而是處理將新行寫入csv文件。

我非常感謝任何閱讀此文的人提供的幫助。

+1

打開該文件'一個+'代替。 –

+0

@ j-darbyshire我用「a +」替換了「rt」和「wt」,它仍然在擦除文件。我做錯了嗎? – Luke25361

+1

將閱讀器設置爲文件的開頭。直接在'ReadFile = open ...'行下面添加'ReadFile.seek(0)'行。現在你的代碼應該按預期運行。 –

回答

2

下面應該工作:

import csv 

with open("./Resources/File.csv", "rt", encoding = "utf-8-sig") as ReadFile: 
    lines = list(csv.reader(ReadFile)) 

with open("./Resources/File.csv", "wt", encoding = "utf-8-sig") as WriteFile: 
    Writer = csv.writer(WriteFile) 
    for line in lines: 
     line[3] = 4 
     Writer.writerow(line) 
+0

這是完美的,非常感謝你! :) – Luke25361

2

當您使用w選項打開作家時,它將刪除內容並重新開始寫入文件。因此,在您開始閱讀時,該文件是空的。

嘗試寫入另一個文件(如FileTemp.csv),並在程序結束時將FileTemp.csv重命名爲File.csv。

+0

謝謝,這似乎是在這種情況下最合理的做法。 :) – Luke25361