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

CSV读取器读取表头时出现开头乱码问题求助

解决CSV读取时表头出现前缀的问题

这个问题我之前也碰到过!你看到的其实是UTF-8文件的字节顺序标记(BOM)——当你的CSV文件是用带BOM的UTF-8编码保存时,Python默认的open()函数不会自动识别并移除这个标记,所以它被当成了表头第一个字段的一部分,就出现了['TIME', 'DAY', 'MONTH', 'YEAR']这种输出。

最简单的解决方法是在打开文件时指定编码为utf-8-sig,这个编码会自动处理UTF-8 BOM:

import csv
with open("20180223.csv", encoding='utf-8-sig') as csvfile:
    rdr = csv.reader(csvfile)
    header = next(rdr)
    print(header)

如果你用的是Python 2(不过看你的代码应该是Python 3),可以用codecs模块来打开文件:

import csv
import codecs
with codecs.open("20180223.csv", 'r', 'utf-8-sig') as csvfile:
    rdr = csv.reader(csvfile)
    header = next(rdr)
    print(header)

原理很简单:utf-8-sig编码会自动检测并移除文件开头的BOM标记,这样csv.reader就能正确读取表头,输出你期望的['TIME', 'DAY', 'MONTH', 'YEAR']了。

如果遇到特殊情况无法指定编码,也可以手动处理第一行(不过这种方法不如指定编码简洁可靠):

import csv
from io import StringIO

with open("20180223.csv", 'rb') as csvfile:
    # 读取第一行并移除BOM
    first_line = csvfile.readline().decode('utf-8').lstrip('\ufeff')
    # 重新构建文件流
    csv_content = first_line + csvfile.read().decode('utf-8')
    csvfile = StringIO(csv_content)
    
    rdr = csv.reader(csvfile)
    header = next(rdr)
    print(header)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:33