Powód, dla którego zawsze otrzymywałeś, True
został już podany, więc podam kolejną sugestię:
Jeśli twój plik nie jest zbyt duży, możesz wczytać go do łańcucha i po prostu go użyć (łatwiej i często szybciej niż czytanie i sprawdzanie linii po linii):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Kolejna sztuczka: możesz złagodzić możliwe problemy z pamięcią, używając mmap.mmap()
do utworzenia obiektu „podobnego do łańcucha”, który korzysta z pliku źródłowego (zamiast czytać cały plik z pamięci):
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')
UWAGA: w Pythonie 3 mmapy zachowują się bytearray
raczej jak obiekty niż łańcuchy, więc podciąg, którego szukasz, find()
musi być również bytes
obiektem, a nie łańcuchem, np. 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')
Możesz także użyć wyrażeń regularnych mmap
np. Przy wyszukiwaniu bez rozróżniania wielkości liter:if re.search(br'(?i)blabla', s):