如何将Python多列表按对应列导出到CSV并避免字符拆分?
嘿,我完全懂你遇到的麻烦——之前的代码把列表元素拆成单个字符逐行写,肯定是因为写入方式没选对。咱们直接上正确的方案,让example和example2分别对应"number"和"number plus 2"列,完美对齐还没多余逗号。
方法一:用csv.writer(基础且高效)
这是最直接的方式,先写表头,再把两个列表的对应元素配对成行写入:
import csv # 假设你的两个列表是这样的 example = [1, 2, 3, 4, 5] example2 = [3, 4, 5, 6, 7] # 打开CSV文件,newline=''避免Windows下出现多余空行 with open('numbers.csv', 'w', newline='', encoding='utf-8') as csv_file: # 创建writer对象 writer = csv.writer(csv_file) # 先写入表头 writer.writerow(['number', 'number plus 2']) # 用zip把两个列表的对应元素配对,逐行写入 for num, num_plus in zip(example, example2): writer.writerow([num, num_plus])
方法二:用csv.DictWriter(更直观,适合多列场景)
如果列名多,用字典的方式写入可读性更高,直接指定每列对应的值:
import csv example = [1, 2, 3, 4, 5] example2 = [3, 4, 5, 6, 7] # 定义列名 fieldnames = ['number', 'number plus 2'] with open('numbers_dict.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=fieldnames) # 写入表头 writer.writeheader() # 遍历配对后的元素,按列名构造字典写入 for num, num_plus in zip(example, example2): writer.writerow({'number': num, 'number plus 2': num_plus})
为什么之前的代码会出错?
大概率是你直接把单个列表元素(比如字符串)传给了writerow()——writerow()接收的是一行内容的可迭代对象,如果传单个字符串(比如'123'),它会把字符串当成字符的列表,拆成['1','2','3']逐列写入;如果是循环列表时直接写元素,就会出现单个字符逐行/逐列的问题。
上面两种方法都能避免这个问题,确保每个列表的元素对应到正确的列,行列完全对齐,也不会有多余逗号。
内容的提问来源于stack exchange,提问作者Kurt Yunge Pérez
相关产品推荐
相关产品推荐

