2013-08-01 30 views
2

我是一個noob,所以我希望這是正確的地方問這個問題。這真的讓我瘋狂。我在尋找一些文本文件中的一句話,這裏是部分代碼:Python:比較兩個字符串,應該是相同的,但不是

SentenceIMLookingfor='blha blha blah' 
with open('textfile.lua','r') as my_file: 
    raw_dadat=my_file.read().split('\n') 
    for i in range(1, len(raw_dadat)): 
     if(raw_dadat[i]==SentenceIMLookingfor): 
      DO_SOMETHING 

那麼它不會做任何事情(我需要知道在什麼行「SentenceIMLookingfor」是)。 我已經檢查過ids(ofc它們不是相同的,所以如果我使用'is'而不是'==',它將不起作用)。我也確定這個句子在我的文本文件中,它甚至存儲在raw_data [210]中。我檢查了「類型」,它是str。句子中還有大約3個空格,我不知道這是否可以提供幫助,而「len(raw_dadat)」或多或少等於4000. 嗯,我沒有看到我做錯了什麼。 非常感謝!

+0

你有沒有嘗試打印出raw_datat [i]試圖去調試呢? – jdero

+0

可能有一些標點符號,尾隨或前導空格或其他不會導致完全匹配的內容。我會遍歷字符串並添加一些分隔符來檢查。 –

回答

3

這可能是額外的間距是你的罪魁禍首。您也可以嘗試降低字符串。

SentenceIMLookingfor='blha blha blah' 
with open('textfile.lua','r') as my_file: 
    for line in my_file: 
     if line.lower().strip() == SentenceIMLookingfor: 
      #DO_SOMETHING 

但是,如果你不檢查一個行是正是等於你要找的那句話,你要使用in運算符來檢查是否相等,所以更換if以上

 if SentenceIMLookingfor in line.lower(): # you may not want .lower() 

由於沒有必要將整個文件讀入內存,您可以通過與for line in my_file文件的行迭代。 .lower()字符串轉換爲全小寫字母,.strip()切斷任何上述或尾隨空白


正如意見建議的@SethMMorton,您可以使用enumerate與行號來遍歷for i, line in enumerate(my_file)

如果你想,這個字符串出現(這很可能),你可以完成與列表理解收集行號

with open('textfile.lua','r') as my_file: 
    line_nos = [i for i, line in enumerate(my_file) if line.lower().strip() == SentenceIMLookingfor] 
+0

由於OP需要知道它所在的行,因此可能是'for i,line in enumerate(my_file):'會更好嗎? – SethMMorton

0

也許你可以OBTA在一行中的文件作爲字符串文本,然後得到這樣的:

>>> a = "qwertyuiopasdfghjkl" 
>>> "qwerty" in a 
True 
>>> 

然後把它變成一個if語句

mySentence = "hello" 
for line in file: 
    if mySentence in line: 
     # Do something 
0

代碼爲您提供它爲我工作。你確定你包含你想在目標文件中找到的字符串嗎?

此外,Python的計數範圍是0.您的意思是從1開始範圍。如果您的搜索項是文件中的第一行,您將無法使用代碼找到它。

以下是您的代碼略乾淨的版本(請注意,不是遍歷一個範圍的迭代,而是遍歷文件中的行)。我已經測試過它,它也可以工作。

SentenceIMLookingfor='blha blha blah' 
with open('textfile.lua','r') as my_file: 
    raw_dadat=my_file.read().split('\n') 
    for line in raw_dadat: 
     if SentenceIMLookingfor in line: 
      print "Found" 
      print "Line: {0}".format(line) 
0

問題確實是間距。要得到它的工作,我稍微改變我的情況,如果對此:

if(raw_dadat[i].strip()==SentenceIMLookingfor.strip()): 

它的工作!非常感謝你們所有人(也爲額外的建議)。

相關問題