Причина, по которой вы всегда получали 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()
должен быть также 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):