在Python中写入csv中的两列中的列表

时间:2017-09-07 22:32:06

标签: python csv

如果我有两个列表

a = [1,2,3,4,5]
b = [1,2,3]

我想通过python在两个不同的列中的csv文件中写这个。像

ABC  BCA
1    1
2    2
3    3
4   
5   

我知道我们有zipzip_longest等设施,可以压缩这些列表并通过writerow()写入csv。但是,我们是否有一些直接的方法可以先写入一列,然后再写入第二列(从上到下),就像我们对writerowwriterows的行所做的那样?

1 个答案:

答案 0 :(得分:0)

这里的问题是你有两个列列表。写入文件时,您需要处理行。一次无法将文件写入列中。

其次,正如您所指出的,您的两列具有不同的长度。一个众所周知的技巧是使用zip(*my_list),它具有转置列表的效果,即交换行/列。通过使用izip_longest(),它将自动填充第二列。

from itertools import izip_longest
import csv

a = [1, 2, 3, 4, 5]
b = [1, 2, 3]

with open('output.csv', 'wb') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(['ABC', 'BCA'])
    csv_output.writerows(izip_longest(*[a, b]))

为您提供CSV输出文件:

ABC,BCA
1,1
2,2
3,3
4,
5,

如果你要:

print list(izip_longest(*[a, b]))

您会看到它对您的数据产生的影响:

[(1, 1), (2, 2), (3, 3), (4, None), (5, None)]    

它现在采用可以使用标准.writerows()调用写入输出文件的形式。