在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),因为它总是附加到末尾。
答案 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;)。