2017-12-20 1 views
0

Ich versuche, den ersten Datensatz als Diktat aus einer CSV-Datei mit dem DictReader zu bekommen. Ich bin nicht in der Lage zu verstehen, wie die Dokumentation nur über Iterieren den Leser ObjektErste Datensatz von CSV-Datei mit DictReader

with open(filename, 'r') as f_in: 
     # Use the csv library to set up a DictReader object. 
     trip_reader = csv.DictReader(f_in) 
     # Use a function on the DictReader object to read the 
     # first trip from the data file and store it in a variable. 
     for row in trip_reader: 
        pprint(row) 

Gibt es eine Funktion erhalten den ersten Datensatz als trip_reader [0] sprechen?

+0

Was genau ist dein Problem? Wenn Sie die Zeile auf dieselbe Weise wie in der CSV-Datei ausgeben möchten, verwenden Sie 'reader' anstelle von' DictReader'. – Arne

+0

Was ist 'pprint'? Wo sind "Stadt" und "Erstes_Reiseziel" definiert, um zurückgegeben zu werden? – pstatix

+0

@ArneRecknagel Ich möchte den ersten Datensatz vom Leser bekommen, ohne die for-Schleife zu benutzen. – dataEnthusiast

Antwort

0

Da Sie über trip_reader laufen kann, können Sie next() auf sie rufen Sie die nächste zu kommen (in diesem Fall die erste Zeile):

with open(filename, 'r') as f_in: 
    # Use the csv library to set up a DictReader object. 
    trip_reader = csv.DictReader(f_in) 
    # Use a function on the DictReader object to read the 
    # first trip from the data file and store it in a variable. 
    row = next(trip_reader) 
    pprint(row) 
1

Zum ersten Zeile einer CSV ohne for Schleife zu erhalten:

with open(filename, 'r', newline='') as f: 
    r = csv.reader(f, delimiter=',') 
    return next(r) 

Natürlich, wenn Sie eine Reihe von Header haben Sie haben zu „springen“ darueber:

with open(filename, 'r', newline='') as f: 
    r = csv.reader(f, delimiter=',') 
    _ = next(r) # hold header row in throwaway variable 
    return next(r) 

Die newline='' im Kontextmanager wird in Python3 + verwendet (möglicherweise auch spätere Versionen von Python2), aber für Python 2.7.8 und früher können Sie weglassen.

+0

ist '_ = next (iter)' bevorzugt über nur 'next (iter)'? – Arne

+0

@ArneRecknagel Hängt von der Implementierung ab; '_' speichert sie einfach, und nach 'return' gibt der Garbage Collector den Speicher frei, da sie nicht mehr im Bereich sind. Ohne es wird manchmal die Implementierung tatsächlich die Header an den 'stdout'-Stream senden und Sie werden sie gedruckt sehen. Verwenden Sie '_ ', wenn Sie nicht möchten, dass sie angezeigt werden. – pstatix

+0

@ArneRecknagel Leistungsmäßig gibt es keinen Unterschied – pstatix

Verwandte Themen