如何将两个Python列表写入CSV文件?输出不符预期求指导
问题分析与解决办法
问题根源
你的代码中vaules列表的结构错误:每条记录被写成了带逗号和引号的完整字符串,csv.writer会将每个这类字符串视为单个单元格,最终导致每条记录仅占2个单元格,而非预期的4个。同时,你用writerow()写入多条记录的列表,这会把整个列表当作一行的多个元素,而非多行记录。
修正方案(推荐)
直接将每条记录拆分为独立字段的列表,让csv.writer自动处理分隔和引号:
import csv # 补充原代码缺失的模块导入 fieldHeader = ["id", "name", "car", "colour"] # 修正:每条记录是独立字段组成的列表,无需手动添加引号和逗号 values = [["1", "John", "honda", "blue"], ["2", "Tom", "bmw", "red"]] with open("output.csv", "w", newline="") as f: # 添加newline=""避免Windows下生成空行 w = csv.writer(f, delimiter=",") w.writerow(fieldHeader) w.writerows(values) # 使用writerows()批量写入多条记录
关键说明
csv.writer会自动处理字段的分隔逻辑,当字段包含逗号、引号等特殊字符时,会自动添加引号包裹,无需手动操作writerows()(复数)用于写入多条记录的列表,而writerow()(单数)仅写入单条记录- 打开文件时指定
newline=""是csv模块的标准写法,可避免Windows系统下生成多余的空行
兼容原字符串格式的方案(不推荐)
如果必须保留原values的字符串格式,可以先用csv.reader解析每个字符串为字段列表后再写入:
import csv fieldHeader = ["id", "name", "car", "colour"] values = ['"1", "John", "honda", "blue"','"2", "Tom", "bmw", "red"'] with open("output.csv", "w", newline="") as f: w = csv.writer(f, delimiter=",") w.writerow(fieldHeader) for line in values: # 解析字符串为字段列表,skipinitialspace=True忽略字段前的空格 row = next(csv.reader([line], delimiter=",", skipinitialspace=True)) w.writerow(row)
内容的提问来源于stack exchange,提问作者SegaffAB
相关产品推荐
相关产品推荐

