2017-02-25 5 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") 

なぜ私がここで範囲を超えているのか分かりません。私は、文字列としてすべての行のリストだけの行の長さを通してforループを実行しようとしましたが、どちらもうまくいきません。以下は、実際のエラーメッセージ範囲外のエラーが発生するのはなぜですか?

トレースバック(最後の最新の呼び出し)である: ファイル "/Users/treawethington/Documents/HW6.py"、16行目は、「 improve_fight_song( "kjhk") ファイルに/ユーザ/ treawethington /ドキュメント/ HW6.py」、8行目、 をimprove_fight_songであれば、 『行でエンジニア』 [S]: はIndexError:私はそれをテストしたときに、範囲外のリストインデックス

+1

はTech_fileであり、わずか10行ありますか? –

+1

同様に、なぜあなたのループを制御する 'range(11)'を選択しましたか? – Chris

+0

いいえ、12があります。しかし、私は11,12,13を範囲に対して試しましたが、私はまだ同じエラーが発生します。 – Trea704

答えて

0

更新されたコードは罰金走ったが、私は考えますあなたが探しているのはこれです:

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

ここで、を実行した後にがRamblinWreck.txtthisの内容になるのは、ImprovedFightSong.txtの内容です。

0

一般に、索引で行のリストをループしないでください。ただ、使用:のみが変更された行を書き、あなたの元のコード

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

注意。

代わりにすべての行を繰り返し処理の、あなただけのファイルの内容全体のために置き換えることができます:

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

オープン時にネストされた 'with'ステートメントを使用しなかったというメモリの問題を避けるためですか?( 'b.txt'、 'w')をb: として開きます(a.read()。replace( 'engineer') 、 'programmer')) ' –

+0

@MaxChrétienシンプルは複合体より優れています。 ;-) –

+0

ahah fair enough :)良いものがある –

関連する問題