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

x4shl7ld  于 2023-10-13  发布在  Python
关注(0)|答案(2)|浏览(81)

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

=CONCATENATE(A1," ",B1)

(User洪水填充的这向下的电子表格,然后简单地删除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),因为它总是附加到末尾。

nwsw7zdq

nwsw7zdq1#

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

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读/写二进制('rb','wb')。

uqdfh47h

uqdfh47h2#

你在循环中调用了writerow两次。我不认为你想这样-写合并的列,然后其他单独?号
您可以简单地将合并的列连接到行的 * 开始 *,并 * 切片 * 旧行:

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

您不再需要del语句,只需调用writerow即可插入修改后的 row

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上下文已经 * 管理 * 了。

相关问题