La raison pour laquelle vous avez toujours obtenu True
a déjà été donné, donc je vais offrir une autre suggestion:
Si votre fichier est pas trop grand, vous pouvez le lire dans une chaîne, et juste l'utiliser (plus facile et souvent plus rapide que la lecture et la ligne de vérification par ligne):
if 'blabla' in open('example.txt').read():
print("true")
une autre astuce: vous pouvez atténuer les problèmes de mémoire possibles en utilisant mmap.mmap()
pour créer un objet « string-like » qui utilise le fichier sous-jacent (au lieu de lire , du fichier entier dans la mémoire):
import mmap
f = open('example.txt')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
REMARQUE: en python 3, mmaps se comporter comme bytearray
objets plutôt que des chaînes, donc la sous-séquence que vous cherchez avec find()
doit être un objet bytes
plutôt qu'une chaîne aussi bien , 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, Recherche insensible à la casse: if re.search(br'(?i)blabla', s):
C'est génial! C'est exactement pourquoi j'aime stackoverflow: cela ne vous donne pas seulement une solution, cela vous donne une meilleure option. Merci :) – HankSmackHood
La deuxième solution ne donne pas les mêmes résultats que "blabla" en open ('example.txt'). Read() 'dans mon python 2.7 – xApple
Etrange, ça marche avec' s.find ('blabla ') '(vérifiez pour -1). Je pourrais jurer qu'il a l'habitude de travailler avec 'in' aussi bien ... Mais il semble maintenant que' in' ne fonctionne que pour les caractères simples ... – Steven