如何在csv / txt文件python的末尾添加新的col

时间:2016-05-14 08:41:25

标签: python csv append multiple-columns

我正在寻找一个脚本,通过python将新数据列添加到现有的csv文件中。我有一个文件(例如file.csv),它有很多行和几列。从for(var i:int=0;i<testArray.length;i++) { if(testArray[i].hitTestObject(chest)) { testArray[i].checkhit=true; hitCount++; /// prefrom your code. } } 计算,我得到了一个新数组(我的代码中的A)。我想将新数组(A)作为现有csv文件的最后一列。我使用下面的代码。

for loop

它确实附加了一个新列作为最后一列。但问题是整个列有一个相同的值(一个值形成最后一个循环)。那么,如果我想将每个for循环的A值作为我的最后一列,我该怎么办呢。谢谢。

示例输入文件

for xxx in xxxx:
  A= xxx

  f=open("file.csv")
  data=[item for item in csv.reader(f)]
  f.close()
  new_column=[A]

  new_data=[]

  for i, item in enumerate (data):

    try:
        item.append (new_column[i])
    except  IndexError, e:
        item.append(A)
    new_data.append(item)

    f=open('outfilefinal1.csv','w')

    csv.writer(f).writerows(new_data)
    f.close()

每个循环的值

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 个答案:

答案 0 :(得分: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)