2009-11-17 10 views
17

J'ai un ensemble d'en-têtes csv que j'essaie de faire correspondre avec les téléchargements. Ça ne marche pas vraiment. Tous les en-têtes ne sont pas obligatoires - je dois juste faire correspondre ce qui se trouve dans le fichier.python en-têtes csv

reader = csv.DictReader(open(PathFile)) 
headers = reader.fieldnames 
for header in sorted(set(headers)): 
    if (header == 'ip') or (header == 'IP'): 
     print "IP found in Header" 

Dans ce cas, l'adresse IP est introuvable.

for row in reader: 
    if row.get('IP'): 
     print "IP found in Row" 

Il n'a pas été retrouvé. Je ne recherche sur ce site - il y avait:

IP = row.get('IP', None) 

qui ne fonctionnait pas non plus.

C'est le fichier que je utilise pour le test:

Email, IP, Name, City, State, zip, country, garbage 
[email protected], 34.4.34.34,Mr GH, chicago, il ,60601, us,erw ewr 
[email protected], 34.45.23.34, Mr 5t,NY,NY,10101, us, er 

Répondre

11

fonction de vos modifications, vous devez skip the initial space après la virgule.

Cela devrait le faire:

>>> reader = csv.DictReader(open(PathFile),skipinitialspace=True) 
6

Je ne suis pas sûr de ce que vous voulez atteindre, mais si vous voulez simplement savoir si certaines colonnes sont au format CSV, et vous êtes sûr que toutes les lignes ont les mêmes colonnes, et que vous voulez utiliser le lecteur dict utiliser cette

s="""col1,col2,col3 
ok,ok,ok 
hmm,hmm,hmm 
cool,cool,cool""" 

import csv 

reader = csv.DictReader(s.split("\n")) 
print reader.fieldnames 
for row in reader: 
    for colName in ['col3', 'col4']: 
     print "found %s %s"%(colName, colName in row) 
    break 

Il produit

found col3 True 
found col4 False 

ou quelque chose comme cela fonctionnera aussi

reader = csv.reader(s.split("\n")) 
columns = reader.next() 
for colName in ['col3', 'col4']: 
    print "found %s %s"%(colName, colName in columns) 
+0

qui ne fonctionnait pas non plus. J'ai édité mon post avec les données de dossier que j'essaye de traiter. Essayer de voir si l'en-tête a IP dedans. – bocca

+0

comme Adam Bernier, dit le problème était avec des espaces –