2

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

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(他们不一样,所以如果我使用 'is' 而不是 '==' 它将不起作用)。另外我确定这句话在我的文本文件中,它甚至存储在 raw_data[210] 中。我检查了“类型”,它是 str。句子中还有大约3个空格,我不知道这是否有帮助,“len(raw_dadat)”或多或少等于4000。好吧,我看不出我做错了什么。非常感谢提前!!

4

5 回答 5

6

额外的间距很可能是你的罪魁祸首。您也可以尝试对字符串进行小写。

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]
于 2013-08-01T16:20:50.537 回答
1

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

null_term_str_compare = "123456789012345\0"
于 2019-03-07T16:41:03.670 回答
0

也许你可以在文件中获取一行文本作为字符串,然后得到这个:

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

然后把它变成一个if语句

mySentence = "hello"
for line in file:
    if mySentence in line:
        # Do something
于 2013-08-01T16:22:50.063 回答
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)
于 2013-08-01T16:52:01.097 回答
0

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

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

它奏效了!非常感谢你们所有人!(还有额外的建议)。

于 2013-08-01T18:22:11.363 回答