如何连接两列并更新python中的csv?

时间:2016-10-12 17:55:32

标签: python csv

在Excel中,我可以使用这样的东西:

=CONCATENATE(A1," ",B1) 

(用户洪水填充' s在电子表格中,然后只删除A和B,最后将结果移到A)

预期结果结果将A和B列合并为一列(A)并用一个空格分隔。

在Python中,这是我到目前为止所拥有的:

import csv
with open("test.csv","rb") as source:
    rdr= csv.reader( source )
    with open("result","wb") as result:
        wtr= csv.writer( result )
        for r in rdr:
            print("Adding merged COL1/COL2 into one column for every row...")
            wtr.writerow(r+[r[0] + ' ' + r[1]])
            print("Deleting COL1/COL2 columns from every row...")
            del r[0]
            del r[0]
            wtr.writerow( r )
    result.close();

虽然,上面的代码确实正确地合并了两列并将一个列附加到文件的末尾,但是一旦完成它就不能正确删除前两行,我相信这是因为已经调用了wtr.writerow 。另外,我不确定如何将列向左移动(返回到A),因为它总是附加到末尾。

2 个答案:

答案 0 :(得分:3)

你在那个循环中调用writerow两次。我不认为你想要那样 - 写合并列,然后分别编写其他列?否。

您只需将合并的列加入行的 start ,然后切掉旧行:

wtr.writerow([r[0] + ' ' + r[1]] + r[2:])
#            ^<- merged rows are added to the start
#                                   ^<- slice off old A1 and B1

您不再需要del语句,只需拨打writerow,即可插入已修改的

import csv 

with open("test.csv","rb") as source, open("result","wb") as result:
    rdr = csv.reader(source)
    wtr = csv.writer(result)
    for r in rdr:
        wtr.writerow([r[0] + ' ' + r[1]] + r[2:])

另外,请注意,您可以在with语句之后添加多个表达式,就像我上面那样。

最后,您无需手动关闭文件 - result.close()with上下文已经管理

答案 1 :(得分:1)

所以你从csv读取(和写入)的每一行都是一个列表,对吗?所以再做一两步并创建你想要的列表,然后写下来。

e.g。

import csv
with open('test.csv') as f:
    reader = csv.reader(f)
    with open('output.csv', 'w') as g:
        writer = csv.writer(g)
        for row in reader:
            new_row = [' '.join([row[0], row[1]])] + row[2:]
            writer.writerow(new_row)

另外,我怀疑你需要从csv读/写二进制文件(&#39; rb&#39;,&#39; wb&#39;)。