Python CSV - 在同一个CSV文件中编写不同的列表

时间:2018-01-11 08:49:10

标签: python-3.x csv

见下面的更新!

对于我的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没有被写入。

1 个答案:

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