见下面的更新!
对于我的Python程序,我需要将3个不同的列表写入csv文件,每个列表都在不同的列中。每个列表都有不同的大小。
l1 = ['1', '2', '3', '4', '5']
l2 = ['11', '22', '33', '44']
l3 = ['111', '222', '333']
f = 'test.csv'
outputFile = open(f, 'w', newline='')
outputWriter = csv.writer(resultFile, delimiter=';')
outputWriter.writerow(headerNames)
for r in l3:
resultFile.write(';' + ';' + r + '\n')
for r in l2:
resultFile.write(';' + r + '\n')
for r in l1:
resultFile.write(r + '\n')
resultFile.close()
不幸的是,这不起作用。列表的值写在右侧列中的每个其他列表下方。我希望列表值彼此相邻,如下所示:
1;11;111
2;22;222
etc.
我确信有一种简单的方法可以完成这项工作,但经过几个小时的尝试后,我仍然无法弄明白。
更新
我尝试了以下内容。这是进步,但我还没有。
f = input('filename: ')
l1 = ['1', '2', '3', '4', '5']
l2 = ['11', '22', '33', '44']
l3 = ['111', '222', '333']
headerNames = ['Name1', 'Name2', 'Name3']
rows = zip(l1, l2, l3)
with open(f, 'w', newline='') as resultFile:
resultWriter = csv.writer(resultFile, delimiter=';')
resultWriter.writerow(headerNames)
for row in rows:
resultWriter.writerow(row)
它以我想要的格式写入数据,但是值4,5和44没有被写入。
答案 0 :(得分:1)
您的第一次尝试是没有正确使用csv模块,也没有像第二次尝试那样转置行。
现在,只要最短的行结束,就会停止压缩行。您需要itertools.ziplongest
代替(例如填充值为0)
import itertools,csv
f = "out.csv"
l1 = ['1', '2', '3', '4', '5']
l2 = ['11', '22', '33', '44']
l3 = ['111', '222', '333']
headerNames = ['Name1', 'Name2', 'Name3']
rows = itertools.zip_longest(l1, l2, l3, fillvalue=0)
with open(f, 'w', newline='') as resultFile:
resultWriter = csv.writer(resultFile, delimiter=';')
resultWriter.writerow(headerNames)
resultWriter.writerows(rows) # write all rows in a row :)
输出文件包含:
Name1;Name2;Name3
1;11;111
2;22;222
3;33;333
4;44;0
5;0;0