Seite 1 von 1

noch ein Zaehlerproblem

Verfasst: Dienstag 17. Juli 2007, 14:42
von silky vanilla

Code: Alles auswählen

inp = open('sum_of_all_LLS')
header = inp.readline()
for line in inp:
    data = line.split()
    data[4] = int(data[4])
    val =0
    if data[4] > 1:
        val +=1

    print val
Ich moechte gern in der 5.Spalte meiner eingelesenen Datei alle die Werte zaehlen, die groesser "1" sind.
Es funktioniert jedoch nicht und ich weiss nicht woran es liegt.
Als Fehlermeldung kommt zum Beispiel
Traceback (most recent call last):
File "/home/cellnet/claudiak/bei/18.561.296 random interactions/100 50 1000/count_evidences.py", line 5, in <module>
data[4] = int(data[4])
IndexError: list index out of range
Das verstehe ich nicht, denn ganz offensichtlich enthaelt meine Datei eine Spalte 5

Re: noch ein Zaehlerproblem

Verfasst: Dienstag 17. Juli 2007, 15:05
von gerold
silky vanilla hat geschrieben:

Code: Alles auswählen

inp = open('sum_of_all_LLS')
header = inp.readline()
for line in inp:
    data = line.split()
    data[4] = int(data[4])
    val =0
    if data[4] > 1:
        val +=1

    print val
Es funktioniert jedoch nicht und ich weiss nicht woran es liegt.
Hallo silky vanilla!

In solchen Fällen hilft ein ``print line`` und ein ``print data``, an richtiger Stelle, die Welt wieder zu verstehen.

mfg
Gerold
:-)

Verfasst: Dienstag 17. Juli 2007, 15:23
von silky vanilla
Ich verstehe nur die Fehlermeldung nicht, es ist nach wie vor die selbe, auch bei dieser Aenderung

Code: Alles auswählen

inp = open('sum_of_all_LLS')

header = inp.readline()
val =0
for line in inp:
    data = line.split()
    
    if int(data[4]) > 1:
        val += 1
print val
inp.close()

Verfasst: Dienstag 17. Juli 2007, 15:42
von BlackJack
Du hast die Fehlermeldung schon verstanden: Es gibt keine 5. Spalte. In irgendeiner der Zeilen. Kann es zum Beispiel sein, dass die Datei als allerletztes eine bzw. zwei Leerzeilen enthält? Das übersieht man gerne mal.

Verfasst: Dienstag 17. Juli 2007, 15:44
von gerold
silky vanilla hat geschrieben:Ich verstehe nur die Fehlermeldung nicht
Hallo silky vanilla!

Damit wollte ich dich nur in die Kunst des Print-Debuggens einführen. ;-)

Die Fehlermeldung "IndexError: list index out of range" bedeutet, dass du versuchst, auf ein Element einer Liste zuzugreifen, welches es nicht gibt. ``data[4]`` gibt es also nicht. Also ist der Name "data" mit etwas anderem belegt, als du glaubst. Um heraus zu finden, mit was "data" befüllt ist --> ``print "data:", data``.
Um heraus zu bekommen, warum data falsch befüllt wird, musst du raus bekommen, was in der aktuellen Zeile steht: ``print "line:", line``

Code: Alles auswählen

inp = open('sum_of_all_LLS')

header = inp.readline()
val =0
for line in inp:
    print "line:", line
    data = line.split()
    print "data:", data
    if int(data[4]) > 1:
        val += 1
print val
inp.close()
Wahrscheinlich wirst du damit drauf kommen, dass in der von dir geöffneten Textdatei in der aktuellen Zeile nicht das drinnen steht, was du vermutest. Und wenn es nur eine Leerzeile ist...
Wahrscheinlich musst du einfach zusätzlich unterhalb von ``for line in inp:`` mit ``if line:`` prüfen, ob etwas in der Zeile steht.

mfg
Gerold
:-)

PS: Nicht vergessen, die print-Anweisungen wieder aus dem Quellcode entfernen.