noch ein Zaehlerproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

noch ein Zaehlerproblem

Beitragvon silky vanilla » Dienstag 17. Juli 2007, 14:42

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: noch ein Zaehlerproblem

Beitragvon gerold » Dienstag 17. Juli 2007, 15:05

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Beitragvon silky vanilla » Dienstag 17. Juli 2007, 15:23

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()
BlackJack

Beitragvon BlackJack » Dienstag 17. Juli 2007, 15:42

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.
Zuletzt geändert von BlackJack am Dienstag 17. Juli 2007, 15:45, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 17. Juli 2007, 15:44

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.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]