【问题标题】:CSV reader picks up garbage in the first few charactersCSV 阅读器在前几个字符中拾取垃圾
【发布时间】:2018-09-07 15:33:37
【问题描述】:

我正在尝试读取 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']

我错过了什么?

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    在 PHP 中,您可以这样做来消除此字节顺序标记,因为您确定它存在:

    $ss = substr(file_get_contents('/path/to/file.csv'), 3);
    

    【讨论】:

      【解决方案2】:

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

      试试这个:

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

      这条建议有点隐藏在documentation 中,但确实存在:

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

      【讨论】:

      • "utf-8-sig"中的"sig"是"signature"的缩写(即签名utf-8文件)。使用 utf-8-sig 读取文件会将 BOM 视为文件信息。而不是一个字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多