Причина, по которой вы всегда получаете True
, уже указана, поэтому я просто предложу другое предложение:
Если ваш файл не слишком большой, вы можете прочитать его в строку и просто использовать его (проще и часто быстрее, чем чтение и проверка строки в строке):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Другой трюк: вы можете устранить возможные проблемы с памятью, используя mmap.mmap()
для создания «строкового» объекта, который использует базовый файл (вместо чтения всего файла в памяти):
import mmap
with open('example.txt') as f:
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
ПРИМЕЧАНИЕ: в python 3 mmaps ведут себя как bytearray
объекты, а не как строки, поэтому искомая последовательность find()
должна быть также bytes
объектом, а не строкой, например. 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):