Python:比较两个应该相同但不相同的字符串

时间:2013-08-01 16:13:55

标签: python string

我是菜鸟,所以我希望这是提出这个问题的合适地方。这真让我疯了。我正在寻找一些文本文件中的句子,这里是部分代码:

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。 好吧,我看不出我做错了什么。 非常感谢提前!!

5 个答案:

答案 0 :(得分:4)

额外的间距可能是你的罪魁祸首。您也可以尝试下拉字符串。

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]

答案 1 :(得分:0)

也许您可以在文件中以字符串形式获取文本行,然后获取:

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

然后将其转换为if语句

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

答案 2 :(得分: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)

答案 3 :(得分:0)

问题确实是间距。为了使它工作,我稍微改变了我的条件,如果:

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

它有效!非常感谢大家!(还有额外的建议)。

答案 4 :(得分:0)

此外,请注意,如果要与以null终止的字符串进行比较,则在打印时它们可能看起来是相同的值,但一个可能以null终止,而另一个则不是。因此,如果您看到两个看起来相同但不相同的字符串,请确保已放入空终止符。

null_term_str_compare =“ 123456789012345 \ 0”