[Python] Problème .find dans un .txt

Problème .find dans un .txt [Python] - Python - Programmation

Marsh Posté le 12-07-2013 à 15:17:05    

Bonjour à toutes et à tous ! j'ai une incompréhension dans mon code python.
Je dois m'occuper de trouver un mot dans un .txt et de l'afficher en couleur, tout fonctionne correctement seulement quand je fait le .find il analyse seulement le premier mot de la phrase et le reste il zappe, pourtant je mets bien le readlines dans une variable que j'analyse par la suite. voici le code :

  
Code :
  1. ERROR='\033[91m'
  2. END='\033[0m'
  3. WARNING="\033[93m"
  4. # Open a file
  5. fo = open("foo.txt", "r" )
  6. print "Name of the file: ", fo.name
  7. fo = open("foo.txt",'r')
  8. lines=fo.readlines()
  9. print lines
  10. for line in lines:
  11.    
  12.     print "studying line.."
  13.     if line.find('Bruno'):
  14.         print "not find"
  15.     else:
  16.    
  17.      print str(ERROR)
  18.      print "ERROR"
  19.         print line
  20.         print str(END)
  21.     if line.find('This is 3rd line\n'):
  22.         print "not find"
  23.     else:
  24.    
  25.      print str(WARNING)
  26.         print "WARNING"
  27.      print line
  28.      print str(END)
  29. fo.close()
 

Par exemple vous voyez ligne 30 je suis obligé de mettre la totalité de la phrase sinon il ne la trouve pas, il ne trouvera pas si je mets : "3rd" par exemple.

  

Need help si vous avez une idée : Je suis débutant en python ! et je suis sur python 2.7

Message cité 1 fois
Message édité par newtonishappy le 12-07-2013 à 15:47:48
Reply

Marsh Posté le 12-07-2013 à 15:17:05   

Reply

Marsh Posté le 13-07-2013 à 10:07:30    

Bonjour newtonishappy,
je n'ai pas le temps de regarder ton code en détail mais find() ne renvoie que la première occurence trouvée. Je ne sais pas si cela peut t'aider...


---------------
rule #1 : trust the python
Reply

Marsh Posté le 21-07-2013 à 12:18:34    

newtonishappy a écrit :

Bonjour à toutes et à tous ! j'ai une incompréhension dans mon code python.
Je dois m'occuper de trouver un mot dans un .txt et de l'afficher en couleur, tout fonctionne correctement seulement quand je fait le .find il analyse seulement le premier mot de la phrase et le reste il zappe, pourtant je mets bien le readlines dans une variable que j'analyse par la suite. voici le code :

 
Code :
  1. ERROR='\033[91m'
  2. END='\033[0m'
  3. WARNING="\033[93m"
  4.  
  5. # Open a file
  6. fo = open("foo.txt", "r" )
  7. print "Name of the file: ", fo.name
  8.  
  9. fo = open("foo.txt",'r')
  10.  
  11. lines=fo.readlines()
  12. print lines
  13. for line in lines:
  14.    print "studying line.."
  15.    if line.find('Bruno'):
  16.        print "not find"
  17.    else:
  18.        print str(ERROR)
  19.        print "ERROR"
  20.        print line
  21.        print str(END)
  22.  
  23.    if line.find('This is 3rd line\n'):
  24.        print "not find"
  25.    else:
  26.        print str(WARNING)
  27.        print "WARNING"
  28.        print line
  29.        print str(END)
  30. fo.close()
 

Par exemple vous voyez ligne 30 je suis obligé de mettre la totalité de la phrase sinon il ne la trouve pas, il ne trouvera pas si je mets : "3rd" par exemple.


Bah c'est normal ton test est tout foireux :/

S.find(sub [,start [,end]]) -> int
   
    Return the lowest index in S where substring sub is found,
    such that sub is contained within s[start:end].  Optional
    arguments start and end are interpreted as in slice notation.
   
    Return -1 on failure.


Le résultat de `find` n'est pas un booléen, c'est l'index de l'élément trouvé ou -1 s'il n'a pas été trouvé, donc 0 (qui est falsy) c'est que l'élément est trouvé à l'index 0, 8 c'est qu'il est trouvé à l'index 8 et -1 c'est qu'il est pas trouvé.

 

Accessoirement,

  • Tu devrais factoriser ta sortie colorée
  • Tu ouvres 2 fois le même fichier sans le fermer
  • Tu devrais utiliser with, et tu peux fermer le fichier juste après le readline puisque readline lit tout en mémoire (ou alors tu itères proprement sur le fichier)
  • Si tu veux juste savoir si un mot est dans un ligne sans avoir son index, il suffit d'utiliser l'opérateur in. `find` c'est pour savoir exactement où la sous-chaîne est, si présente (et `index` permet de savoir où la sous chaîne est avec une assertion de présence: si la sous-chaîne est absence ça envoie une exception)


Code :
  1. ERROR='\033[91m'
  2. END='\033[0m'
  3. WARNING="\033[93m"
  4. def error(s): print "%sERROR: %s%s" % (ERROR, s, END)
  5. def warn(s): print "%sWARNING: %s%s" % (WARNING, s, END)
  6.  
  7. with open('foo.txt', 'rb') as fo:
  8.    print "Name of the file: ", fo.name
  9.  
  10.    for line in fo:
  11.        print "studying line...",
  12.        if "Bruno" in line:
  13.            error(line)
  14.        elif '3rd' in line:
  15.            warn(line)
  16.        else:
  17.            print "no match"


Message édité par masklinn le 26-07-2013 à 16:37:47

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed