2017-01-10 4 views
8

Wenn eine CSV-Lesen, anstelle erste Zeile des Überspringens (Header) und Zeilen Artikel nach Anzahl Lesen:Lesen CSV Artikel mit Spaltennamen

with open('info.csv') as f: 
    reader = csv.reader(f, delimiter=';') 
    next(reader, None) 
    for row in reader: 
     name = row[0] 
     blah = row[1] 

gibt es eine integrierte Möglichkeit Reihe Elemente zuzugreifen, indem Verwendung des Headernamens? Etwas wie:

with open('info.csv') as f: 
    reader = csv.reader(f, delimiter=';', useheader=True) 
    for row in reader: 
     name = row['name'] 
     blah = row['blah'] 

wo info.csv eine Kopfzeile hat:

Name, blah
John; Hello2
Mike; Hello2

Antwort

8

Sie suchen DictReader

with open('info.csv') as f: 
    reader = csv.DictReader(f, delimiter=';') 
    for row in reader: 
     name = row['name'] 
     blah = row['blah'] 

aus dem Link zu zitieren:

Erstellen Sie ein Objekt, das wie ein regelmäßiger Leser arbeitet aber bildet die Informationen in eine dict, deren Schlüssel gelesen werden gegeben durch den optionalen Feldnamen Parameter. ... Wenn der Parameter fieldnames weggelassen wird, werden die Werte in der ersten Zeile von der csvfile als Feldnamen verwendet.

3

Ja, es gibt. Das ist, was csv.DictReader Funktion tut - liefert die Zeilen als ein iterable von dicts.

4

Sie können eine csv.DictReader Instanz verwenden, um dieses Verhalten zu erhalten.

Beispiel der Dokumente:

>>> with open('names.csv') as csvfile: 
...  reader = csv.DictReader(csvfile) 
...  for row in reader: 
...   print(row['first_name'], row['last_name']) 
... 
Eric Idle 
John Cleese