2016-04-16 13 views
-2

Ich habe Probleme mit einer Liste für ein Mittelungsprogramm, heißt es:Python-Liste Indexfehler (Schüler-Dateien)

‚Linie 20, in nameletter = (Brief [int (num)]) Indexerror: Listenindex außerhalb des zulässigen Bereichs‘

Dies ist der Teil des Codes:

f2 = open("Classes" + "/Sorted/" + "Alphabetical.txt", "w") 

letter = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 

print(letter[num]) 

#Loop 
while num <= 26: 
    nameletter = (letter[int(num)]) 
    if os.path.exists("Classes" + "/" + nameletter + ".txt"): 
     #Opening the students file 
     f = open("Classes" + "/" + nameletter + ".txt") 
     List = f.read().splitlines() 
     f.close() 
     #Writing data to the file 
     f2.write(List[5] + " - score = " + List[6]) 
     f2.write("\n") 
    else: 
     pass 
    num = int(num) + 1 
f2.close() 
+0

In ein wenig Code kann man nicht sehen, weiter oben das Programm – Banana

Antwort

1

Normalerweise verwenden Sie eine Schleife wie

for one_letter in letter: 
    # your code 

alle Elemente einer Liste zuzugreifen.

Schleifen mit Hilfe eines Index ist auch OK, aber Sie müssen an der richtigen Stelle stoppen. In Ihrem Fall haben Sie 26 Artikel und da der Index 0-basiert, ist die höchste Zahl 25 nicht 26

0

Listen von 0 indiziert sind also der letzte Index Ihrer Briefe 25 nicht 26 Aber besser ein for- verwenden Schleife, dann müssen Sie nicht mit der Hand zählen:

import string 
f2 = open("Classes" + "/Sorted/" + "Alphabetical.txt", "w") 
for lettername in string.uppercase: 
    try: 
     with open('Classes/%s.txt' % lettername) as inp: 
      lines = inp.read().splitlines() 
    except IOError: 
     pass 
    else: 
     f2.write('%s - score = %s' % (lines[5], lines[6])) 
f2.close() 
0

Wenn Sie es Reiniger und prägnante und tun es wie ein Ninja

machen wollen
wf = os.path.join("Classes", "Sorted", "Alphabetical.txt") 
rf_ = os.path.join("Classes","{letter}.txt") 
line = "{} - score = {}" 
# separate the output strs from logic 
alphabet = [chr(i) for i in range(65, 91)] # ['A', 'B', ..., 'Z'] 
with open(wf, "wt") as fw: 
    for letter in alphabet: 
     rf = rf_.format(letter=letter) 
     if os.path.exists(rf): 
      with open(rf) as fr: 
       ls = fr.read().splitlines() 
       print(line.format(ls[5], ls[6]), file=fw) # this will write to fw 

Verwenden Sie immer os.path.join anstelle von str Akrobatik, um robust zu sein (Beazly). Wenn der Code nicht funktioniert, bitte Kommentar.

+0

Ja das hat funktioniert Vielen Dank, aber jetzt versuche ich, die Daten in den Dateien zu sortieren und ich habe Probleme damit – Banana

+0

@Banana Sie sollten aktualisieren die Frage mit Ihrer Zielausgabe, damit es für alle klar ist. –

+0

Ich weiß nicht wie, ich habe kürzlich ein Konto erstellt? – Banana

Verwandte Themen