如何将多个数组按对应列逐行写入CSV文件
问题原因
你当前写法的问题在于csv.DictWriter的writerows()方法要求传入由每行对应字典组成的可迭代对象,你直接传入了单个包含三个完整数组的字典,会把整个数组作为单个值写入同一行,因此得到错误的输出格式。
修复代码
你只需要用zip()方法按位置配对三个数组的元素,逐行构造字典写入即可,示例如下:
import csv # 替换为你实际的三个数组 number1 = [0, 1, 2, 3] number2 = [10, 8, 9, 2] number3 = [3, 4, 5, 3] # 新增newline=''参数避免Windows下输出出现多余空行 with open('names.csv', 'w', newline='') as csvfile: fieldnames = ['number1', 'number2', 'number3'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 按位置配对三个数组的元素逐行写入 for n1, n2, n3 in zip(number1, number2, number3): writer.writerow({ 'number1': n1, 'number2': n2, 'number3': n3 })
如果你希望用writerows批量写入提升效率,也可以批量构造行列表后写入:
# 替换上述逐行写入的循环即可 rows = [{'number1': n1, 'number2': n2, 'number3': n3} for n1, n2, n3 in zip(number1, number2, number3)] writer.writerows(rows)
补充说明
如果你的数组是numpy数组类型,上述代码同样适用,不需要额外做转置操作,zip()会自动按索引提取每个数组的对应位置元素。
内容的提问来源于stack exchange,提问作者Savannah
相关产品推荐
相关产品推荐

