2016-11-11 114 views
0

我在python 3.5上,想從文件中找到匹配的單詞。我給的這個詞是awesome.txt文件中的第一個詞也是awesome。那麼爲什麼addedWord不等於word?有人能給我理由嗎?爲什麼字符串從文件中獲取不等於普通字符串?

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

我也試過爲:

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

使用了'is'其比較對象的身份,而不是值進行比較。如果他們在記憶中的不同位置具有相同的價值,那麼他們的身份是不同的。 –

+0

你應該用'=='比較字符串。操作'is'檢查,如果addedWord是相同的對象字 –

+2

相關:http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python –

回答

1

這兩個字符串將永遠是相同的對象,所以你不應該使用is對它們進行比較。使用==

你脫掉換行符的直覺是點亮的,但你只需要一個電話strip()(它將去除包括製表符和換行符在內的所有空格)。

+0

你的建議是正確的,但你的斷言是錯誤的。兩個字符串有時可能是同一個對象,但不管它們是否不確定。 –

+0

右鍵 - 修復它。 – kindall

0

您的代碼有兩個問題。

1)字符串從迭代文件返回包括尾隨換行符。如你所懷疑的,你需要.strip(),.rstrip().replace()換行。

2)字符串比較應與==,不is來執行。

所以,試試這個:

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

糟糕,只是發現我的代碼片段錯了。固定。 –