CSV模块返回BOM对于第一列

问题描述:

我有此格式的CSV文件:CSV模块返回BOM对于第一列

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 csv模块解析它(第3版)。这里是我的代码:

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模块属性。

+1

你已经使用'开放的(“xref.csv”尝试,encoding ='utf-8')as csvData:'? – PRMoureu

+0

好主意。我只是试过了,我仍然检索相同的BOM。但我怀疑这是沿着这些路线的。 – Dom

你要告诉你正在阅读的UTF-8文件,BOM:

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

那么BOM将被剥离

+0

这样做。谢谢! – Dom