216 votes

Recherche de chaîne dans le fichier txt Python

Je veux vérifier si une chaîne est dans un fichier txt. Si c'est le cas, faites X. Si ce n'est pas le cas, faites Y. Cependant, ce code retourne toujours True pour une raison quelconque. Quelqu'un qui voit ce qui ne va pas?

  def check():
        datafile = file('example.txt')
        found = False
        for line in datafile:
            if blabla in line:
                found = True
                break

check()
if True:
    print "true"
else:
    print "false"
 

486voto

Steven Points 10243

La raison pourquoi vous avez toujours eu True a déjà été donné, donc je vais en offrir une autre suggestion:

Si votre fichier n'est pas trop grand, vous pouvez le lire en une chaîne de caractères, et l'utiliser (plus facile et souvent plus rapide que la lecture et de vérifier ligne par ligne):

if 'blabla' in open('example.txt').read():
    print "true"

Une autre astuce: vous pouvez atténuer les éventuels problèmes de mémoire en utilisant mmap.mmap() de créer une "chaîne comme" objet qui utilise le fichier sous-jacent (au lieu de lire tout le fichier en 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 comportent comme des bytearray des objets plutôt que des chaînes de caractères, de sorte que la sous-suite vous recherchez avec find() a un bytes objet plutôt qu'une chaîne de caractères, par exemple. s.find(b'blabla')

36voto

amccormack Points 2510

Comme Jeffrey Said, vous ne vérifiez pas la valeur de check() . De plus, votre fonction check() ne renvoie rien. Notez la différence:

 def check():
        datafile = file('example.txt')
        found = False #this isn't really necessary 
        for line in datafile:
            if blabla in line:
                #found = True #not necessary 
                return True
        return False #because you finished the search without finding anything


print check()
 

29voto

amitnaruto Points 21

Voici une autre façon de répondre éventuellement à votre question en utilisant la fonction de recherche qui vous donne une valeur numérique littérale indiquant où se trouve réellement quelque chose.

 open('file', 'r').read().find('')
 

dans find, écrivez le mot que vous voulez trouver et 'file' représente votre nom de fichier

14voto

Jeffrey Greenham Points 603
 if True:
    print "true"
 

Cela arrive toujours parce que True est toujours True.

Vous voulez quelque chose comme ça:

 if check():
    print "true"
else:
    print "false"
 

Bonne chance!

4voto

sdolan Points 15572

Votre fonction check devrait renvoyer le found booléen et l'utiliser pour déterminer ce qu'il faut imprimer.

 def check():
        datafile = file('example.txt')
        found = False
        for line in datafile:
            if blabla in line:
                found = True
                break

        return found

found = check()
if found:
    print "true"
else:
    print "false"
 

le second bloc pourrait également être condensé à:

 if check():
    print "true"
else:
    print "false"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X