2010-03-02 107 views
89

我想添加一個新行到我的舊csv文件。基本上,每次運行Python腳本時都會更新它。追加新行到舊的CSV文件python

現在我將舊的csv行值存儲在列表中,然後刪除csv文件並使用新的列表值重新創建它。

想知道有沒有更好的方法來做到這一點。

回答

118
fd = open('document.csv','a') 
fd.write(myCsvRow) 
fd.close() 

打開文件與'a'參數可以附加到文件,而不是簡單地覆蓋現有內容的末尾。試試看。

+1

我試過 fp = open(csv_filepathwithname,'wa') writer = csv。Writer(fp) somelist = [3,56,3,6,56] writer.writerow((somelist)) 但只有最後一行會被附加到文件中。 – laspal 2010-03-02 14:49:31

8

你用'a'而不是'w'模式打開文件嗎?

參見Reading and Writing Files在python文檔

7.2。讀寫文件

open()返回一個文件對象,最常用於兩個參數:open(filename,mode)。

>>> f = open('workfile', 'w') 
>>> print f <open file 'workfile', mode 'w' at 80a0960> 

第一個參數是一個包含文件名的字符串。第二個參數是 另一個字符串,其中包含幾個字符,用於描述文件將被使用的方式。模式可以是'r',當文件只有 讀時,'w'只寫入(現存的同名文件將被刪除, ),'a'打開文件進行追加;任何寫入 的數據都會自動添加到文件末尾。 'r +'打開 文件的閱讀和寫作。模式參數是可選的; 'r'將被假設爲 ,如果省略。

在Windows上,該模式附加的'b'以二進制模式打開文件,所以 也有'rb','wb'和'r + b'等模式。 Windows上的Python 區分了文本和二進制文件;在讀取或寫入數據 時,文本文件末尾的 字符會稍微自動更改。這種對文件數據 的後臺修改對於ASCII文本文件來說很好,但它會破壞JPEG或EXE文件中的 這樣的二進制數據。當讀取 並編寫這些文件時,請非常小心地使用二進制模式。在Unix上,將模式追加'b'並不會傷害到該模式,因此您可以在所有二進制 文件中獨立使用它。

+0

可能是你可以讓你的答案更詳細,然後它會看起來像一個真正的答案:-) – user702846 2011-07-29 12:10:24

+0

@用戶,我添加了一個鏈接 - 這是否幫助你? – 2011-07-29 20:08:05

59

我更喜歡這個解決方案,使用標準庫中的csv模塊和with語句來避免文件打開。

關鍵是在打開文件時使用'a'進行追加。

import csv 
fields=['first','second','third'] 
with open(r'name', 'a') as f: 
    writer = csv.writer(f) 
    writer.writerow(fields) 

您可能會在Windows中體驗到多餘的新行。您可以嘗試使用'ab'而不是'a'來避免它們。