2017-02-25 3 views
0
def improve_fight_song(title): 
    Tech_file = open("RamblinWreck.txt","r") 
    myfile= open("ImprovedFightSong.txt","w") 
    lines = Tech_file.readlines() 

#Lets find all of the engineer cases. 
    for s in range(len(lines)): 
     if "engineer" in lines[s]: 
      z = lines[s].replace("engineer","programmer") 
      myfile.write(z) 



    myfile.close() 

improve_fight_song("kjhk") 

Ich kann nicht herausfinden, warum ich hier aus der Reichweite läuft. Ich habe versucht, die for-Schleife durch die Länge der Zeilen zu tun, die nur eine Liste aller Zeilen als Zeichenfolgen ist, aber das funktioniert auch nicht. Unten ist die eigentliche FehlermeldungWarum erhalte ich einen Index außerhalb des Bereichsfehlers?

Traceback (jüngste Aufforderung zuletzt): File "/Users/treawethington/Documents/HW6.py", Zeile 16, in improve_fight_song ("kjhk") Datei „/ Users/treawethington/Dokumente/HW6.py“, Zeile 8, in improve_fight_song wenn "Ingenieur" in den Zeilen [s]: Indexerror: Listenindex außerhalb des zulässigen Bereichs

+1

Gibt es nur 10 Zeilen in Tech_file? –

+1

In ähnlicher Weise, warum hast du 'range (11)' gewählt, kontrollierst du deine Schleife? – Chris

+0

Nein, da sind 12. Aber ich habe versucht 11, 12, 13, für den Bereich und ich bekomme immer noch den gleichen Fehler. – Trea704

Antwort

0

Ihr aktualisierte Code gut lief, wenn ich es getestet, aber ich denke, Was Sie suchen, ist dies:

def improve_fight_song(): 
    tech_file = open("RamblinWreck.txt", "r") 
    myfile = open("ImprovedFightSong.txt", "w") 
    lines = tech_file.readlines() 

    # Lets find all of the engineer cases. 
    for line in lines: # no need for range here 
     if "an engineer" in line: 
      myfile.write(line.replace("an engineer", "a programmer")) 
     else: 
      myfile.write(line) 

    myfile.close() 
    tech_file.close() # close this file as well 


improve_fight_song() 

Dabei ist this der Inhalt von RamblinWreck.txt und this ist der Inhalt von ImprovedFightSong.txt nachdem Sie HW6.py ausgeführt haben.

0

Sie sollten im Allgemeinen keine Liste von Zeilen nach Index durchlaufen. Verwenden Sie einfach:

for s in lines: 
    if 'engineer' in s: 
     z = s.replace('engineer', 'programmer') 

Beachten Sie, dass Ihr Original-Code nur die Zeilen schreibt, die sich geändert haben.

Statt alle Zeilen iterieren, könnten Sie tun, nur die für den gesamten Inhalt der Datei ersetzen:

with open("RamblinWreck.txt","r") as infile: 
    text = infile.read() 

outtext = text.replace('engineer', 'programmer') 

with open("ImprovedFightSong.txt","w") as outfile: 
    outfile.write(outtext) 
+0

Ist es zur Vermeidung von Speicherproblemen, dass Sie keine verschachtelte 'with'-Anweisung bei open verwendet haben? 'mit öffnen ('a.txt', 'r') als a, öffnen ('b.txt', 'w') als b: b.write (a.read(). Ersetzen ('engineer' , 'Programmierer') ' –

+0

@ MaxChrétien Einfach ist besser als komplex. ;-) –

+0

ahah fair genug :) habe einen guten –

Verwandte Themen