Accueil » Python » Forums Python » Forum général Python » Trouver un mot dans un fichier...

 • Trouver un mot dans un fichier...

Document Actions
Réponses: 8   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • Trouver un mot dans un fichier...

Posté par ph_biohazard le 14/05/2008 23:43
Bonjour a tous,

J'ai un fichier qui peut changer de contenu aleatoirement.
Je souhaite trouver un mot dans une phrase lorsqu'il existe et me capturer la phrase entiere qui contient ce mot.

J'ai essaye un premier script, mais le resultat ne me convient pas, car le resultat affiche des 10saines de non trouve.

Voici mon code :
code:
from cStringIO import StringIO 
out = StringIO()
log = open("c:/test.log", 'r') 
texte =  log.readlines() 
 
for i in texte:
  if i.find('site')>0:
    print 'trouve'
    print texte
  else :
    print 'non trouve'


Merci pour votre aide
Cordialement
Marc

 • Re: Trouver un mot dans un fichier...

Posté par glickind le 16/05/2008 10:59
StringIO est inutile ici.

Le code suivant n'affiche qu'une seule fois 'non trouve' s'il n'y a aucun site dans le fichier
mais affichera 'trouve' et la ligne à chaque fois

code:
log = open("test.log", 'r') 
texte =  log.readlines() 

trouve = False
for ligne in texte:
    if ligne.find('site')>=0: # attention ne pas oublier le = , find renvoie la position a partir de 0
        print 'trouve'
        trouve = True
        print ligne
if not trouve :
    print 'non trouve'


si tu veux n'afficher 'trouve' qu'une seule fois, il suffit de rajouter if not trouve : avant print 'trouve' comme ceci:
code:
        if not trouve :
            print 'trouve'
            trouve = True
        print ligne, # ici la virgule permet d'eviter de sauter une ligne


pour info, sous Linux il existe la commande grep
qui permet de rechercher un mot dans un ou plusieurs fichiers avec quelques options supplémentaires ...
certains l'ont même codée en python:
http://nedbatchelder.com/code/utilities/pygrep.py

 • Re: Trouver un mot dans un fichier...

Posté par ph_biohazard le 16/05/2008 17:11
Merci pour ton aide :)

Bonne journee
Marc

 • Re: Trouver un mot dans un fichier...

Posté par salvatore le 19/05/2008 10:51
Bonjour,

Trouver un mot dans un fichier peut s'avérer très gourmant en mémoire si on utilise 'readlines' et que le fichier est trop volumineux

Regarde cette doc :
http://www.dabeaz.com/generators/Generators.pdf

Tu y trouveras un 'grep' façon Python bien plus efficace

Cordialement

Salvatore


 • Re: Trouver un mot dans un fichier...

Posté par ph_biohazard le 20/05/2008 17:03
Bonjour Salvatore,

J'etudie ton document et te tiens informe

Merci pour cette info

Marc

 • Re: Trouver un mot dans un fichier...

Posté par ychaouche le 23/05/2008 13:34
code:
trouve = 0
mot = "wireless"
fichier = "/var/log/syslog"
def egg(ligne):
    trouve = 1
    print 'trouve',mot,'dans ligne"', ligne,'"'

for ligne in open(fichier,'r').xreadlines():mot in ligne and egg(ligne)
if not trouve: print "non trouve"


affiche par exemple

code:
trouve wireless dans ligne" May 23 09:36:04 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
"
trouve wireless dans ligne" May 23 09:38:06 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
"
trouve wireless dans ligne" May 23 09:40:08 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
"
trouve wireless dans ligne" May 23 09:42:10 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
"
...


ou
code:
non trouve


Si pas de mot trouvé dans le fichier

 • Re: Trouver un mot dans un fichier...

Posté par ph_biohazard le 27/05/2008 18:52
Merci, ton script repond tout a fait a mon besoin :)

Merci pour toute l'aide et les informations de chacun

Cordialement,

Marc

 • Re: Trouver un mot dans un fichier...

Posté par ychaouche le 13/06/2008 14:52
Petite amélioration ici avec le numéro de la ligne en prime :
code:
trouve = 0
mot = "wireless"
fichier = "/var/log/syslog"

def egg(ligne,numeroLigne):
    trouve = 1
    print "trouve %s a la ligne numero %s : %s " % (mot,numeroLigne,ligne)

for numeroLigne,ligne in enumerate(open(fichier,'r').xreadlines()):mot in ligne and egg(ligne,numeroLigne)

if not trouve: print "non trouve" 


Affichera maintenant :

code:
trouve wireless a la ligne numero 16 : Jun 13 10:05:42 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
 
trouve wireless a la ligne numero 19 : Jun 13 10:07:44 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 
 
trouve wireless a la ligne numero 23 : Jun 13 10:09:46 bughunter NetworkManager: <WARN>  nm_device_802_11_wireless_scan(): could not trigger wireless scan on device eth1: No such device 

...

 • Re: Trouver un mot dans un fichier...

Posté par gawel le 13/06/2008 16:24
Moi aussi je veux jouer !!!


code:

boiboite:~/tmp% cat find.py
import re
_r = re.compile('System Wake')
fd = open('/var/log/system.log')
for i, r in enumerate([_r.findall(l), l ] for l in fd.xreadlines()):
    if r[0 ]:
        r.insert(1, i)
        print '%r at line %i: %r' % tuple(r)
boiboite:~/tmp% python find.py
['System Wake'] at line 5: 'Jun 13 04:08:00 boiboite kernel[0]: System Wake\n'
['System Wake'] at line 11: 'Jun 13 07:01:00 boiboite kernel[0]: System Wake\n'