CSV阅读器会在前几个字符中拾取垃圾

时间:2018-03-28 19:58:07

标签: python python-3.x csv

我正在尝试阅读CSV文件的第一行并将其分配给header。 CSV文件如下所示:

TIME,DAY,MONTH,YEAR
"3:21","23","FEB","2018"
"3:23","23","FEB","2018"
...

以下是代码:

import csv

with open("20180223.csv") as csvfile:
    rdr = csv.reader(csvfile)
    header = next(rdr)
    print(header)

我希望输出看起来像:

['TIME', 'DAY', 'MONTH', 'YEAR']

然而输出如下:

['TIME', 'DAY', 'MONTH', 'YEAR']

我错过了什么?

2 个答案:

答案 0 :(得分:7)

第一个字符是Byte order mark字符。

试试这个:

with open("20180223.csv", encoding="utf-8-sig") as csvfile:

这个建议隐藏在documentation中,但它存在:

  

在某些地区,通常在开头使用“BOM”   UTF-8编码文件;该名称具有误导性,因为UTF-8不是   字节顺序依赖。该标记只是宣布文件是   以UTF-8编码。使用'utf-8-sig'编解码器自动跳过   标记是否存在以读取此类文件。

答案 1 :(得分:0)

在PHP中,您可以这样做以摆脱此字节顺序标记,因为您肯定知道它存在:

dec/jcc