csv 模块返回第一列的 BOM

Dom*_*Dom 3 python csv unicode python-3.x

我有一个格式如下的 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
Run Code Online (Sandbox Code Playgroud)

我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

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

408: {'\ufefftype': 'Residential', 'type_mapping': 'Residential', 
      ' style': 'Antique', 'style_mapping': 'Antique', 'Count': '109'}}
Run Code Online (Sandbox Code Playgroud)

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

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

Gui*_*ton 6

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

with open('xref.csv', encoding='utf-8-sig') as csvData:
    ....
Run Code Online (Sandbox Code Playgroud)

然后 BOM 将被剥离