2016-11-12 12 views
0

myWords.txtファイルにユニークな単語を保存します。私は単語を検索していますが、ファイル内に見つかった場合はそれを書きませんが、見つからない場合はその単語を書き込みます。問題は、プログラムを2回目に実行すると、ポインタがファイルの最後にあり、ファイルの最後から検索し、最後に書き込んだ単語をもう一度書き込むことです。いくつかの位置でseek(0)を使用しようとしましたが動作しません。私は何か間違っているのですか?コード2回ファイルの先頭にカーソルを移動しますか?

myWords.txt

awesome 
shiny 
awesome 
clumsy 
shiny 
naughty 
naughty 
+0

に似ています。あなたは '休憩 'の前に入れなければなりません – furas

+0

@furasありがとう。編集されました。私もその前にそれを試してみましたが、うまくいきません。 – Amar

+0

あなたは間違っていたと思います。 'if/else'ではなく' for/else' construnctionが必要です - したがって 'else'は' for'の下になければなりません – furas

答えて

0

あなたは間違ってインデントを持っている - 今では最初の行に異なるテキストを検索し、自動的にそれが他の行をチェックしないためnaughtyを追加します。

for/else/breakの構造を使用する必要があります。 elseforと同じ字下げをしています。

プログラムがnaughtyの場合は、forループを残すのにbreakを使用し、elseをスキップします。 fornaughtyを見つけられない場合は、breakを使用せずにelseを実行します。

with open("myWords.txt", "r+") as a: 
    word = "naughty" 
    for line in a: 
     if word == line.strip(): 
      print("found") 
      break 
    else: # no break 
     a.write(word + "\n") 
     print("writing:", word) 

    a.close() 

それはbreak` `の後に何を入れても意味がありません

with open("myWords.txt", "r+") as a: 
    word = "naughty" 

    found = False 

    for line in a: 
     if word == line.strip(): 
      print("found") 
      found = True 
      break 

    if not found: 
     a.write(word + "\n") 
     print("writing:", word) 

    a.close() 
+0

ありがとうございました。私の悪い..それは動作します。 – Amar

0

を実行する上で

with open("myWords.txt", "r+") as a: 
# a.seek(0) 
    word = "naughty" 
    for line in a: 
     if word == line.replace("\n", "").rstrip(): 
      break 
     else: 
      a.write(word + "\n") 
      print("writing " +word) 
      a.seek(0) 
      break 

    a.close() 

myWords.txt

awesome 
shiny 
awesome 
clumsy 
shiny 

あなたは追加モードでファイルを開く必要があり、 "a"または "ab" "モードとして。 open()を参照してください。あなたは「」モードで開くと

、書き込み位置は常にファイル(APPEND)の終わりになります。 "a +"で開くと、読み込み、後方検索、読み込みができます(ただし、すべての書き込みはファイルの最後にあります)。

これが動作するかどうかを教えてください:

with open("myWords.txt", "a+") as a: 

    words = ["naughty", "hello"]; 
    for word in words: 
     a.seek(0) 
     for line in a: 
      if word == line.replace("\n", "").rstrip(): 
       break 
      else: 
       a.write(word + "\n") 
       print("writing " + word) 
       break 

    a.close() 

は、この情報がお役に立てば幸い!

関連する問題