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):
'blabla' in open('example.txt').read()
dans mon python 2.7s.find('blabla')
(vérifiez -1). Je pourrais jurer que cela fonctionnaitin
aussi ... Mais il semble maintenant que celain
ne fonctionne que pour des personnages uniques ...if 'blabla' in open('example.txt').read(): print "true"
==> Comment fermer leexample.txt
fichier dans ce cas?open
devrait généralement être encapsulé dans unewith
déclaration:with open(file_name) as fl: return text in fl.read()
Comme l'a dit Jeffrey, vous ne vérifiez pas la valeur de
check()
. De plus, votrecheck()
fonction ne renvoie rien. Notez la différence:Ensuite, vous pouvez tester la sortie de
check()
:la source
Voici une autre façon de répondre éventuellement à votre question en utilisant la fonction find qui vous donne une valeur numérique littérale de l'endroit où quelque chose se trouve vraiment
dans find, écrivez le mot que vous souhaitez rechercher et
'file'
représente le nom de votre fichierla source
Cela se produit toujours parce que True est toujours vrai.
Vous voulez quelque chose comme ça:
Bonne chance!
la source
J'ai fait une petite fonction à cet effet. Il recherche un mot dans le fichier d'entrée, puis l'ajoute au fichier de sortie.
la source
Votre
check
fonction doit renvoyer lefound
booléen et l'utiliser pour déterminer ce qu'il faut imprimer.le deuxième bloc pourrait également être condensé en:
la source
Deux problèmes:
Votre fonction ne renvoie rien; une fonction qui ne renvoie rien explicitement renvoie None (ce qui est faux)
True est toujours vrai - vous ne vérifiez pas le résultat de votre fonction
.
la source
Comment rechercher le texte dans le fichier et renvoie un chemin de fichier dans lequel le mot se trouve (Как искать часть текста в файле и возвращять путь к файлу в котором это словой)
Dans Main ()
la source
found = Faux
la source
Si l'utilisateur souhaite rechercher le mot dans un fichier texte donné.
la source
la source