A razão pela qual você sempre recebeu True
já foi apresentada, então vou oferecer outra sugestão:
Se o seu arquivo não for muito grande, você poderá lê-lo em uma string e apenas usá-lo (mais fácil e frequentemente mais rápido do que ler e verificar linha por linha):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Outro truque: você pode aliviar os possíveis problemas de memória usando mmap.mmap()
para criar um objeto "semelhante a uma string" que usa o arquivo subjacente (em vez de ler o arquivo inteiro na memória):
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')
OBSERVAÇÃO: no python 3, os mmaps se comportam como bytearray
objetos, e não como strings; portanto, a subsequência que você procura find()
deve ser um bytes
objeto e não uma string também, por exemplo. 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')
Você também pode usar expressões regulares em mmap
, por exemplo, pesquisa sem distinção entre maiúsculas e minúsculas:if re.search(br'(?i)blabla', s):