2017-09-16 1 views
0

Je dispose d'un fichier csv formaté comme ceci:module csv retourner une nomenclature pour la première colonne

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

Je l'analyse à l'aide du module csv en Python (version 3). Voici mon code:

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) 

Pour une raison quelconque ma première colonne retourne toujours la marque d'ordre d'octet \ufeff pour la première colonne dans l'en-tête.

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

Je suppose que cela est dû à la façon dont j'ouvre le fichier, la lecture du contenu avec le module csv, ou la génération du fichier.

Je peux comprendre comment décoder ce champ, mais je m'assurerais plutôt de générer le fichier correctement, ou d'utiliser la propriété csv du module.

+1

vous avez déjà essayé avec 'avec open ('xref.csv' , encoding = 'utf-8') en tant que csvData: '? – PRMoureu

+0

Excellente idée. J'ai juste essayé et je récupère toujours la même nomenclature. Je pense que c'est quelque chose dans ce sens. – Dom

Répondre

1

Vous devez dire que vous lisez un fichier utf-8 avec BOM:

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

Ensuite, la nomenclature sera dépouillé

+0

Cela a fait l'affaire. Merci! – Dom