Python读取CSV文件表头出现无法识别特殊字符的原因是什么?
问题根本原因
你看到的表头前缀乱码是**UTF-8 BOM(字节顺序标记)**解码异常的直接表现:
- 部分Windows平台的编辑器(如旧版Excel)导出UTF-8编码的CSV文件时,会在文件最开头额外插入3个不可见的特殊字节
0xEF 0xBB 0xBF,也就是UTF-8 BOM,用于标识文件的编码类型为UTF-8。 - 你当前的代码调用
open()打开文件时没有指定对应解码格式,Python会将这3个特殊字节当做普通文本内容解码,最终就会显示为乱码,并拼接到第一个表头字段的开头。
修复方案
推荐两种成熟的解决方式,无需手动移除字符:
- 打开文件时指定编码为
utf-8-sig,Python会自动识别并移除开头的BOM标记,调整后的代码如下:
import csv def readCSV(filename, begin_date="01/07/2020", end_date="30/09/2020"): # 新增encoding参数指定带BOM的UTF-8解码规则 file = open(filename, encoding='utf-8-sig') csvreader = csv.reader(file) header = next(csvreader) # 后续数据读取逻辑保持不变即可 if __name__ == '__main__': raw_load_data = readCSV("Total_load_2020.csv") raw_forecast_data = readCSV("Total_load_forecast_2020.csv")
- 若需要兼容多编码场景,也可以在读取表头后手动移除BOM:对第一个表头字段调用
.lstrip('\ufeff')即可清除BOM对应的Unicode字符。
内容的提问来源于stack exchange,提问作者Xu Siyuan
相关产品推荐
相关产品推荐

