You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法写入读取数据的CSV文件,Excel单元格拆分与行写入异常问题

手动生成符合Excel识别的CSV文件

问题场景

手里有个10行的矩阵(每行对应原CSV的一条数据),要把这些数据加上计算好的「Nota Final」(最终成绩)写回CSV,要求不能用Python的csv模块。现有代码生成的文件在Excel里显示异常,内容没有拆分到单个单元格,格式完全不符合预期。

现有代码

def escribir():
    columna = ["Nombre","Carnet","Examen","Proyecto","Nota Final"]
    datos = [str(matriz[0]),"\n",str(matriz[1]),"\n",str(matriz[2]),"\n",str(matriz[3]),"    \n",str(matriz[4]),"\n",str(matriz[5]),"\n",str(matriz[6]),"\n",str(matriz[7]),"\n",str(matriz[8]),"    \n",str(matriz[9])]
    archivo = open("archivo.csv","w")
    archivo.writelines(columna)
    archivo.writelines(datos)
    archivo.close()

当前错误输出(Excel中显示)

NombreCarnetExamenProyectoNota Final['Juan', 'B48670', '80', '92', '86.0']
['Maria', 'B98635', '85', '89', '87.0']
['Marcela', 'B65872', '100', '70', '85.0']
['Enrique', 'C08563', '87', '95', '91.0']
['Luis', 'B86763', '92', '85', '88.5']
['Osvaldo', 'C15860', '85', '80', '82.5']
['Heidi', 'C25863', '70', '75', '72.5']
['Fernando', 'C35964', '65', '80', '72.5']
['Gerardo', 'C45790', '60', '60', '60.0']
['Estefania', 'B95605', '96', '90', '93.0']

期望的CSV格式

Nombre, Carnet, Examen, Proyecto, Nota Final
Juan,B48670,80,92,
Maria,B98635,85,89,
Marcela,B65872,100,70,
Enrique,C08563,87,95,
Luis,B86763,92,85,
Osvaldo,C15860,85,80,
Heidi,C25863,70,75,
Fernando,C35964,65,80,
Gerardo,C45790,60,60,
Estefania,B95605,96,90,

问题原因&修正方案

现有代码的核心问题:

  • 列名直接用writelines写入,没有用逗号分隔,导致Excel把所有列名当成一个单元格内容
  • 把矩阵的行转成字符串(str(matriz[0])),输出后带列表的[]和元素引号,Excel无法识别为多个单元格
  • 换行符混用了普通换行和带空格的换行,导致格式混乱

修正后的代码:

def escribir():
    # 列名用逗号+空格连接,最后加换行符
    columna_linea = ", ".join(["Nombre","Carnet","Examen","Proyecto","Nota Final"]) + "\n"
    # 处理每行数据:用逗号连接元素,最后加逗号(匹配期望格式),再换行
    datos_lineas = []
    for fila in matriz:
        # 取前4个元素,最后留空(对应期望的末尾逗号)
        fila_str = ",".join(fila[:4]) + ",\n"
        datos_lineas.append(fila_str)
    
    # 用with语句自动管理文件,避免忘记关闭
    with open("archivo.csv","w") as archivo:
        archivo.write(columna_linea)
        archivo.writelines(datos_lineas)

补充说明

  • 用", ".join()把列名拼接成带逗号分隔的字符串,Excel会自动拆分到不同单元格
  • 遍历矩阵的每一行,取前4个元素用逗号连接,末尾加逗号(匹配你要的格式),再换行
  • 使用with语句操作文件,无需手动调用close(),更安全可靠
  • 如果后续要把「Nota Final」的数值填进去,只需要修改fila_str = ",".join(fila[:4]) + "," + str(fila[4]) + "\n"即可

内容的提问来源于stack exchange,提问作者Santiago Rojas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:17:11