2016-05-14 202 views
-1

我正在尋找一個腳本來通過python將新數據列添加到現有的csv文件中。我有一個文件(例如file.csv),它會有很多行和很少的列。從for loop的計算,我得到了一個新的數組(在我的代碼在這裏)。我想追加新的數組(A)作爲現有csv文件的最後一列。我使用了下面的代碼。如何在csv/txt文件的末尾添加新列python

​​3210

它確實追加了一個新列作爲最後一列。但問題是整列有一個相同的值(最後一個循環的值)。那麼,如果我希望每個for循環的A值作爲我的最後一列,我該怎麼辦?謝謝。

例輸入文件

1 2 
2 4 
0 9 
4 8 

從各個線圈

3 
4 
0 
9 

值那麼最終文件應顯示

1 2 3 
2 4 4 
0 9 0 
4 8 9 

但對我來說它顯示爲

1 2 9 
2 4 9 
0 9 9 
4 8 9 

回答

0

您的代碼存在的問題是您在覆蓋for循環中覆蓋您的文件。

是一個真正的數組,不依賴於file.csv?然後,你可以做這樣的事情:

import csv 

A = compute_new_values_list() 

with open('file.csv') as fpi, open('out.csv', 'w') as fpo: 
    reader = csv.reader(fpi) 
    writer = csv.writer(fpo) 

    #optionaly handle csv header 
    headers = next(reader) 
    headers.append('new_column') 
    writer.writerow(headers) 

    for index, row in enumerate(reader): 
     row.append(A[index]) 
     writer.writerow(row) 

編輯:

如果您需要FILE.CSV一行來計算新的值,可以使用相同的代碼,只是計算你的新價值在for循環中:

import csv 

with open('file.csv') as fpi, open('out.csv', 'w') as fpo: 
    reader = csv.reader(fpi) 
    writer = csv.writer(fpo) 

    #optionaly handle csv header 
    headers = next(reader) 
    headers.append('new_column') 
    writer.writerow(headers) 

    for row in reader: 
     new_value = compute_from_row(row) 
     row.append(new_value) 
     writer.writerow(row) 
+0

實際上A值是從file.csv讀取數據後計算出來的。那樣的話,我該怎麼辦? TKS –