2016-11-11 35 views
0

私はPython 3.5で、ファイルから一致する単語を探したいと思っています。私が与えている言葉はawesomeであり、.txtファイルの最初の単語もawesomeです。なぜaddedWordwordと等しくないのですか?誰かが私に理由を与えることができますか?ファイルからの文字列が一般的な文字列と等しくないのはなぜですか?

myWords.txt

awesome 
shiny 
awesome 
clumsy 

コード

addedWord = "awesome" 
     with open("myWords.txt" , 'r') as openfile: 
       for word in openfile: 
        if addedWord is word: 
         print ("Match") 

をマッチングするためのIはまた、試してみました:私もで、変数のクラスを取得しようとしました

d = word.replace("\n", "").rstrip() 
a = addedWord.replace("\n", "").rstrip() 
     if a is d: 
      print ("Matched :" +word) 

typeOf(addedWord) a nd typeOf(word)どちらも'str'クラスですが、等しくはありません。ここに間違いはありますか?

+0

ので、これを試してみてください。それらが同じ値を持つメモリ内の別の場所にある場合、そのIDは異なります。 –

+0

文字列を '=='と比較する必要があります。演算子 'added'は、addedWordが単語 –

+2

と同じオブジェクトであるかどうかをチェックします。関連:http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python –

答えて

1

これらの2つの文字列は決して同じオブジェクトではないため、isを使用してそれらを比較しないでください。 ==を使用してください。

改行を取り除く直感はスポットライトですが、strip()(タブと改行を含むすべての空白を削除します)への単一の呼び出しが必要です。

+0

あなたのアドバイスは正しいですあなたの主張は間違っています。 2つの文字列が同じオブジェクトであることもありますが、どちらが存在するかどうかは保証されていません。 –

+0

右寄せしました。 – kindall

0

コードには2つの問題があります。

1)反復ファイルから返される文字列には、末尾の改行が含まれます。あなたが疑うように、改行が離れて.strip().rstrip()または.replace()になる必要があります。

2)文字列の比較は==で実行する必要があり、isでは実行しないでください。あなたは、オブジェクトのアイデンティティではなく、値を比較し、 `is`を使用して比較している

if addedWord == word.strip(): 
     print ("Match") 
+0

私のコードスニペットが間違っていたことに気がつきました。一定。 –

関連する問題