如果我有两个列表
a = [1,2,3,4,5]
b = [1,2,3]
我想通过python在两个不同的列中的csv文件中写这个。像
ABC BCA
1 1
2 2
3 3
4
5
我知道我们有zip
,zip_longest
等设施,可以压缩这些列表并通过writerow()
写入csv。但是,我们是否有一些直接的方法可以先写入一列,然后再写入第二列(从上到下),就像我们对writerow
或writerows
的行所做的那样?
答案 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()
调用写入输出文件的形式。