2013-08-01 24 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()): 

它的工作!非常感谢你们所有人(也为额外的建议)。

相关问题