2016-08-03 8 views
0
def findWord(word): 
    f = open("words.txt", "r") 
    given_line = f.readlines() 
    for line in f: 
     if str(word) in line: 
      part = line[0] 
      ## print(line+"\n"+str(word)+" is a "+part) 
      return True 
     else: 
      return False 
    print("fail") 
    f.close() 

def partSpeech(inX): 
    f = open("words.txt", "a") 
    inX = inX.split() 
    for i in inX: 
     i = i.lower() 
     if(findWord(i) == False): 
      if "ify" in i[-3:] or "ate" in i[-3:] or "ize" in i[-3:] or "ing" in i[-3:] or "en" in i[-2:] or "ed" in i[-2:]: 
       f.write("\nV"+i) 
      elif "ment" in i[-4:] or "ion" in i[-3:] or "acy" in i[-3:] or "ism" in i[-3:] or "ist" in i[-3:] or "ness" in i[-3:] or "ity" in i[-3:] or "or" in i[-2:] or "y" in i[-1:]: 
       f.write("\nN"+i) 
      elif "ly" in i[-2:]: 
       f.write("\nD"+i) 
     else: 
      print(i+" was already in the database.") 

本質的に、私の問題は「for line in f:」で発生します。問題は、コード全体で多数のマーカー(どこにあるかを決めるためのプリント)を配置した後、forループが実行されていないことです。私は、それがちょうどその行であるかfが数えられていないか、何であるかに関わらず、本当に理解できません。PythonファイルI/Oの問題:For Loopをバイパスしますか?

このスニペットでは、一連の単語を取り上げて、指定されたテキストファイル(問題がある部分)に既に入っているかどうかをチェックし、 、もしそうでなければ、それらに音声タグの一部を付け加えます。

EDIT:エラーはまったく起こりません。Forループを実行していないということだけです。すべての関数はある時点で呼び出され、partSpeechは単語の小さなリストで最後に呼び出されます。

EDIT 2:PROGRESS!並べ替えテキストファイルは空だったので、何の行も何も読み込んでいませんでした。しかし、今では、単語が既に存在するかどうかは考慮されていません。それだけでそれらをスキップします。

+0

def partSpeech()を実際にどこかで呼び出していますか? –

+1

"*テキストファイルが空でした*" – dimo414

答えて

0

まずオフ、この行を削除:

given_line = f.readlines() 

これは、未使用given_line変数にファイルの内容を読み取り、ファイルの末尾に配置fを残しています。あなたのforループには何もループしません。


あなたfindWord()機能は、あなたも実行されていないループのための手段を想定している行動を引き起こしている可能性がありますそれらのいずれか、奇数/問題のあるものの数をしています。ここで可能な再実装です:あなたはすでにファイルの内容を読んでいると、カーソルがファイルの末尾にあるので

def findWord(word): 
    # it seems odd to pass a "word" parameter that isn't a str, but if you must handle that 
    # case you only need to do the cast once 
    word = str(word) 
    # always use the with statement to handle resources like files 
    # see https://www.python.org/dev/peps/pep-0343/ 
    with open("words.txt", "r") as f: 
    for line in f: 
     if word in line: 
     return True 
    return False # only return False after the loop; once we've looked at every line 
    # no need to call f.close(), the with statement does it for us 
+0

以前と同じ問題です。私はf.seek(0)を追加しただけで、開始時に位置マーカーを取得しようとしました。 –

+0

@JacobDavisが私の答えを更新しました。あなたの 'findWord()'関数は、あなたが意図したことをしていないと思います。 – dimo414

+0

こんにちは!あなたはそれを働かせる!笑ってはいけませんが、主な問題は、Falseの部分が右に大きくずれることです。私はそれのために自分自身が嫌いです、ハハ。ありがとう! (fyi:前にテキストファイルが空だったので、印刷/ループを通過していませんでした) –

0

for line in f:実行されることはありません。

あなたがすべき

for line in given_line:

それともあなたは自分のforループの前に、この文を入れることができます:

f.seek(0)

これは、ファイルの先頭にカーソルをバック置きます。

+0

どちらも問題を解決していないようです。一緒にいても、For Loopをスキップして何が起こっているのか分かりません。 –