2016-05-20 2 views
0

Ich bin in einem Prozess der Erstellung der Liste der Spalten fest. Ich versuchte zu vermeiden, defaultdict zu verwenden.enumerieren Append-Fehler beim Erstellen der Liste von CSV

Danke für jede Hilfe!

ist hier mein Code:

# Read CSV file 
with open('input.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    #-----------# 
    row_list = [] 
    column_list = [] 
    year = [] 
    suburb = [] 
    for each in reader: 
     row_list = row_list + [each] 
     year = year + [each[0]]#create list of years 
     suburb = suburb + [each[2]]#create list of suburb 
     for (i,v) in enumerate(each[3:-1]): 
      column_list[i].append(v) 
      #print i,v 
    #print column_list[0] 

Meine Fehlermeldung:

19   suburb = suburb + [each[2]]#create list of suburb 
20   for i,v in enumerate(each[3:-1]): 
---> 21    column_list[i].append(v) 
22    #print i,v 
23 #print column_list[0] 

IndexError: list index out of range 

gedruckte Ergebnis von (i, v):

0 10027 
1 14513 
2 3896 
3 23362 
4 77966 
5 5817 
6 24699 
7 9805 
8 62692 
9 33466 
10 38792 
0 0 
1 122 
2 0 
3 
4 137 
5 0 
6 0 
7 
8 
9 77 
10 

Grundsätzlich ist Ich möchte Listen haben, die so aussehen.

column[0]=['10027','0'] 
column[1]=['14513','122'] 

Eine Probe meiner CSV-Datei:

enter image description here

+0

Ich verstehe nicht, wie sich Ihre Ausgabe auf Ihre Eingabe bezieht. –

+0

@DanielRoseman Mein (i, v) hat ausgedruckt und hat einen Wert. Es ist jedoch nicht möglich, in 'column_list' anzufügen – chrispybear

+0

Könnten Sie ein Beispiel für die CSV-Datei geben, die Sie versuchen zu lesen? – sumit

Antwort

0

Ja Wie Alex erwähnt das Problem ist in der Tat aufgrund des Zugriffs auf den Index vor dem Erstellen/Initialisieren es als eine alternative Lösung können Sie auch dies berücksichtigen.

hoffnung Es kann helfen!

+0

Ja! Es hat geholfen. Ich danke dir sehr – chrispybear

0

Der Fehler tritt auf, weil column_list leer ist, und so kann man nicht column_list[i] zugreifen, da sie nicht existiert. Es spielt keine Rolle, dass Sie an es anhängen möchten, weil Sie nicht an etwas nicht vorhandenes anhängen können, und Anhängen nicht von Grund auf neu erstellt.

column_list = defaultdict(list) würde in der Tat lösen, aber da Sie dies nicht tun möchten, ist das einfachste, um sicherzustellen, dass column_list beginnt mit vielen leeren Listen anhängen. Wie folgt aus:

column_list = [[] for _ in range(size)] 

wo size ist die Anzahl der Spalten, die Länge der each[3:-1], die offenbar 11 nach Ausgabe aus.

+0

Vielen Dank für Ihre klare Erklärung. Ich erkenne den Fehler jetzt :) – chrispybear