La raison pour laquelle vous avez toujours obtenu True
a déjà été donnée, alors je vais juste proposer une autre suggestion:
Si votre fichier n'est pas trop volumineux, vous pouvez le lire dans une chaîne et l'utiliser simplement (plus facile et souvent plus rapide que de lire et de vérifier ligne par ligne):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Autre astuce: vous pouvez atténuer les éventuels problèmes de mémoire en utilisant mmap.mmap()
pour créer un objet "en forme de chaîne" qui utilise le fichier sous-jacent (au lieu de lire le fichier entier en mémoire):
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')
REMARQUE: en python 3, les mmaps se comportent comme des bytearray
objets plutôt que comme des chaînes, donc la sous-séquence que vous recherchez find()
doit être un bytes
objet plutôt qu'une chaîne, par exemple. 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')
Vous pouvez également utiliser des expressions régulières sur, mmap
par exemple, une recherche insensible à la casse:if re.search(br'(?i)blabla', s):