2016-05-14 158 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 –