Причину, чому ви завжди отримуєте 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):