2016-11-03 4 views
0
import csv 

data = {} 
f = open("train.csv") 
csv_f = csv.reader(f) 
labels = next(csv_f) 
for i in range(len(labels-1)): 
    a = [] 
    for row in csv_f: 
     a += row[i] 
    data [labels[i]] = a 

ich den Code tue oben versuchen, eine CSV-Datei zu lesen und die Spalten in ein Wörterbuch mit dem ersten Teil als die Etiketten aufgeführt und dem zweiten Teil als arra der Werte. Dies funktioniert für meine erste Spalte, die für meinen Datensatz 'ID' ist, aber es funktioniert danach nicht mehr - es lässt nur das a Array als leer. Ich habe ein Debugging durchgeführt und festgestellt, dass es die äußere for-Schleife und dann die innere Schleife macht, aber dann, als es den zweiten Durchlauf der äußeren for-Schleife durchführte, übersprang es einfach die innere for-Schleife. Das hat es auch für alle folgenden getan.Python 3: Verschachtelte for-Schleifen verschachtelte Schleifen Überspringen

Warum macht es das?

Und wie kann ich meinen Code reparieren, damit es aufhört?

+0

Verstehen Sie, was jede Ihrer Schleifen tun? –

+1

Mögliches Duplikat von [Python csv.reader: Wie kehre ich zum Anfang der Datei zurück?] (Http://stackoverflow.com/questions/431752/python-csv-reader-how-do-i-return-to -the-top-of-the-file) – Kevin

+0

Können Sie ein Beispiel für den Inhalt von 'train.csv' geben und was Sie als Ausgabe wollen, weil Ihre Beschreibung nicht klar ist? – EvensF

Antwort

0

Wie Kevin sagt oben, ich denke, das Problem ist, dass nach der ersten Iteration durch csv_f müssten Sie den CSV-Reader zurück an den Anfang der Datei zurückgesetzt werden. Bei diesem Algorithmus müssen Sie die gesamte Datei mehrmals analysieren, um alle Daten zu sammeln. Ein effizienterer Algorithmus würde die Datei Zeile für Zeile analysieren. Ich habe diesen Code nicht überprüft, damit er nicht 100% ig ist, aber hoffentlich weist er Sie in die richtige Richtung.

import csv 

data = {} 
f = open("train.csv") 
csv_f = csv.reader(f) 

isLabelRow = True 

for row in csv_f: 
    print "Processing row : " + str(row) 
    if isLabelRow: 
     # Get labels from first row of data 
     labels = [] 
     isLabelRow = False 

     # Initialize data "columns" 
     for label in row: 
      print "Processing label : " + label 
      labels.append(label) 
      data[label] = [] # empty array 

    else: 
     # Add each item in the row to the appropriate "column" in data 
     for i in range(len(row)): 
      data[labels[i]].append(row[i]) 
Verwandte Themen