Il motivo per cui hai sempre avuto True
è già stato dato, quindi ti offrirò solo un altro suggerimento:
Se il tuo file non è troppo grande, puoi leggerlo in una stringa e utilizzarlo (più semplice e spesso più veloce della lettura e del controllo di riga per riga):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Un altro trucco: è possibile alleviare i possibili problemi di memoria utilizzando mmap.mmap()
per creare un oggetto "simile a una stringa" che utilizza il file sottostante (anziché leggere l'intero file in memoria):
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')
NOTA: in Python 3, i mmap si comportano come bytearray
oggetti piuttosto che come stringhe, quindi la sottosequenza che cerchi find()
deve essere un bytes
oggetto anziché una stringa, ad es. 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')
È inoltre possibile utilizzare espressioni regolari ad mmap
es. Per la ricerca senza distinzione tra maiuscole e minuscole:if re.search(br'(?i)blabla', s):