【问题标题】:csv module returning a BOM for first columncsv 模块返回第一列的 BOM
【发布时间】:2018-02-25 14:23:25
【问题描述】:

我有一个格式如下的 csv 文件:

type,type_mapping, style,style_mapping,Count
Residential,Residential,Antique,Antique,109
Antique,Residential,Antique,Antique,48
Apt/Garage,Commercial,Apt/Garage,Apartment,1

我正在使用 Python(版本 3)中的 csv 模块对其进行解析。这是我的代码:

import os
import csv

typeXref = dict()
with open('xref.csv') as csvData:
    csvRead = csv.reader(csvData)
    headers = next(csvRead)

    for index, row in enumerate(csvRead):
        typeXref[index] = {key: value for key, value in zip(headers, row)} 

print(typeXref)

由于某种原因,我的第一列不断​​返回标题中第一列的字节顺序标记\ufeff

408: {'\ufefftype': 'Residential', 'type_mapping': 'Residential', 
      ' style': 'Antique', 'style_mapping': 'Antique', 'Count': '109'}}

我认为这是由于我打开文件、使用 csv 模块读取内容或生成文件的方式所致。

我可以弄清楚如何解码该字段,但宁愿确保我正确生成文件,或者使用csv 模块属性。

【问题讨论】:

  • 您是否已经尝试使用with open('xref.csv', encoding='utf-8') as csvData:
  • 好主意。我刚刚尝试过,但我仍然检索到相同的 BOM。然而,我怀疑它是沿着这些方向发展的。

标签: python python-3.x csv unicode


【解决方案1】:

你必须告诉你正在读取一个带有 BOM 的 utf-8 文件:

with open('xref.csv', encoding='utf-8-sig') as csvData:
    ....

然后BOM会被剥离

【讨论】:

  • 谢谢!经过一番搜索终于找到了这个。建议使用quotecharquoting=csv.QUOTE_ALL 的答案对我不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多