如何在Python中将多维列表写入CSV文件?已尝试方法但遇列数异常
解决Python多维列表写入CSV仅显示一列的问题
首先,咱们先拆解你遇到的核心问题:不管是直接写入多维列表,还是循环合并CSV的代码,最终生成的CSV都只有一列,这大概率是文件打开模式、索引逻辑或者列表结构的问题。
一、直接写入多维列表的正确写法
你第一个代码里用了'wb'二进制模式打开文件,在Python 3中这会干扰csv.writer的正常工作——因为csv模块需要处理文本模式下的换行符规则。另外,指定newline=''能避免生成多余的空行。
针对你的示例列表[[1,2,3],[4,5,6]],用下面的代码就能得到每行3列的CSV:
import csv mylist = [[1,2,3],[4,5,6]] output = "result.csv" with open(output, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f, delimiter=',') writer.writerows(mylist)
运行后CSV内容会是:
1,2,3 4,5,6
二、循环合并CSV代码的问题修正
你的第二段代码是想把mylist的元素追加到已有CSV的每行后,但出现单列的原因可能有这几个:
- 循环索引错误:
i从1开始,而mylist的索引从0开始,导致第一次循环就取到了mylist[1],和输入CSV的行不匹配 - 打开文件时没指定
newline='',导致换行符异常 - 输入CSV的每行本身只有一个元素(比如每行是带逗号的字符串,而非被分割的多元素列表)
修正后的代码示例(假设输入CSV每行对应mylist的一个子列表):
import csv import os mylist = [[1,2,3],[4,5,6]] folder = "./your_target_folder" # 替换成你的实际文件夹路径 # 索引从0开始,匹配mylist的元素顺序 for i in range(len(mylist)): input_path = os.path.join(folder, f"{i}_development") output_path = os.path.join(folder, f"{i+1}_development") with open(input_path, 'r', encoding='utf-8') as csvinput, \ open(output_path, 'w', newline='', encoding='utf-8') as csvoutput: reader = csv.reader(csvinput) writer = csv.writer(csvoutput) # 逐行合并输入CSV内容和mylist对应子列表 for row_idx, row in enumerate(reader): if row_idx < len(mylist): writer.writerow(row + mylist[row_idx]) else: writer.writerow(row) os.remove(input_path)
额外排查点
如果还是出现单列,检查这两个细节:
- 确认
mylist的每个子列表是多个独立元素(比如[1,2,3]),而非一个包含逗号的字符串(比如["1,2,3"]会被当成单列) - 用文本编辑器打开CSV,看分隔符是否被识别——如果系统默认分隔符不是逗号,可在
csv.writer里明确指定delimiter=','强制使用逗号分隔
内容的提问来源于stack exchange,提问作者Whiteneon
相关产品推荐
相关产品推荐

