为什么你总是得到True的原因已经给出,所以我只提出另一个建议:
如果你的文件不是太大,你可以读它到一个字符串,只是使用(更容易,通常比每行阅读和检查行更快):
if 'blabla' in open('example.txt').read():
print "true"
另一个窍门:你可以通过使用mmap.mmap()来创建一个“类似字符串”的对象,使用底层文件(而不是读取整个文件在内存中),可以缓解可能的内存问题:
import mmap
f = open('example.txt')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print 'true'
注意:在python 3中,mmaps的行为像bytearray对象而不是字符串,所以你用find()寻找的子序列必须是一个字节对象,而不是一个字符串,例如。 s.find(b’blabla’):
#!/usr/bin/env python3
import mmap
with open('example.txt', 'rb', 0) as file, \
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
if s.find(b'blabla') != -1:
print('true')
您还可以在mmap上使用正则表达式,例如,不区分大小写的搜索:if re.search(br'(?i)blabla’,s):