我是菜鸟,所以我希望这是提出这个问题的合适地方。这真让我疯了。我正在寻找一些文本文件中的句子,这里是部分代码:
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 :(得分: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”