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

如何创建.csv文件使其在Excel中按指定配置正常打开?

问题原因

生成的CSV在Excel中直接打开显示异常,来自两个核心问题:

  • 编码不兼容:Excel直接双击打开CSV时,默认不会自动识别无BOM头的UTF-8编码,中文环境下会用GBK编码解析内容,直接导致中文乱码。
  • 写入逻辑错误:现有代码用双重循环逐元素调用writerow的写法完全不符合csv模块的使用逻辑:writerow的入参需要是一整行的可迭代对象,传入单个元素时,如果元素是字符串会被拆分为单个字符写入不同列,再加上手动额外写入换行符,最终会出现单元格拆分、内容错位、多余空行的问题,和预期的二维表结构完全不符。
修复方案

打开文件时指定使用utf-8-sig编码,该编码会自动在文件开头写入UTF-8 BOM头,Excel可以自动识别该编码,不会出现乱码;同时修正写入逻辑,直接遍历二维数组的每一行整行写入,不需要嵌套循环逐元素传参,也不需要手动添加换行符,csv写入器会自动处理符合规范的换行。
修正后的代码如下:

import csv

def to_csv(string, name):
    with open(f"CSV_{name[:-4]}.csv", 'w', newline='', encoding='utf-8-sig') as c:
        writer = csv.writer(c, delimiter=',')
        for row in string:
            writer.writerow(row)

可选简化方案:如果不需要自定义csv写入逻辑,也可以直接使用numpy自带的保存方法,不需要额外导入csv模块:

import numpy as np

def to_csv(string, name):
    np.savetxt(
        f"CSV_{name[:-4]}.csv",
        string,
        delimiter=",",
        fmt="%s",
        encoding="utf-8-sig"
    )
注意事项
  • 不要手动调用文件对象的write("\n")方法添加换行,csv.writer在写入每一行时会自动添加符合CSV规范的换行符,手动添加会产生多余空行。
  • 如果坚持使用无BOM的纯UTF-8编码保存文件,双击直接打开必然会出现乱码,只能通过Excel的「数据-自CSV/文本导入」功能手动选择UTF-8编码才能正常加载内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:09:25