Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
740 connectés 

  FORUM HardWare.fr
  Programmation
  Python

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2197303
newtonisha​ppy
Posté le 12-07-2013 à 15:17:05  profilanswer
 

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
mood
Publicité
Posté le 12-07-2013 à 15:17:05  profilanswer
 

n°2197362
suizokukan
Posté le 13-07-2013 à 10:07:30  profilanswer
 

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
n°2198228
masklinn
í dag viðrar vel til loftárása
Posté le 21-07-2013 à 12:18:34  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

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

 

Sujets relatifs
Probléme GMPProblème signature ds windows live mail
Probléme avec les socket en C[RESOLU] PROBLEME AVEC FORMULAIRE
Problème de comparaison textbox et cellule activeprobléme application WINDEV
probleme array_multisortProblème de menu déroulant
probleme index site web[RESOLU]Probleme TinyMCE
Plus de sujets relatifs à : [Python] Problème .find dans un .txt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR