Annonce

Réduire
Aucune annonce.

exercice de recherche de mot par expression regulière

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • exercice de recherche de mot par expression regulière

    bonjour a tous, je suis tombé sur un exercice très intéressant dont je vous met l'énoncé ici:

    Écrivez un programme cherche qui fonctionne comme la commande grep de UNIX : elle prend pour
    arguments une expression régulière et une liste de fichiers et elle parcourt ces fichiers à la recherche de textes qui
    correspondent à l’expression régulière. Lorsque de tels textes sont trouvés, elle affiche le nom de fichier, le
    numéro de la ligne et la ligne contenant le texte en question.
    L’expression régulière et la liste de fichiers seront indiquées à votre programme à travers les arguments de la
    ligne de commande.
    Par exemple, la commande suivante recherche dans le fichier « data1.txt » du répertoire courant toutes les
    lignes commençant par la lettre « L » et terminant par un « s » :
    $ python cherche.py "L.*s" data1.txt
    data1.txt:14:Les sablettes
    data1.txt:72:Les lones
    data1.txt:112:Lorgues
    data1.txt:120:Le cannet des maures

    j'ai éssayé de le faire mais je bloque a certains enndroits,j'aimerai que ce qui sont intéressé essayent de le faire et partagent leur code et pour ceux qui trouvent des erreur due au plantage du mien,qu'ils le signalent et m'aide a l'améliorer afin de sortir un produit parfait et qui fonctionne ,merci.


    Code:
    import sys,os
    import re 
    
    liste_fichier=[]
    expression=sys.argv[1]
    
    def usage():
    	print("Usage: [Regex] [fichier1] [fichier2] [fichier^N]")
    while len(sys.argv) != len(liste_fichier)+1:
    	usage()
    	break 	
    regex=re.compile(expression)
    di=os.getcwd()+"\\"
    for i in sys.argv[2:]:
    	liste_fichier.append(di+i) 
    	print(di+i)
    def fonction_parcour(regex,i):  # fonction d'analyse de fichiers "i" represente un fichier dans la liste
    	j=1                         # variable 'j' qui compte le nombre de ligne dans le fichier
    	dic={}						# dictionnaire de retour de la fonction
    	try:
    		f=open(i,"r")
    	except:
    		print("Problème d'ouverture du fichier")
    		usage()
    		exit(0)
    	for c_ligne in f.readline():# boucle de parcour de chaque ligne du fichier
    		if c_ligne=="":
    			break
    		liste_cores_ligne=regex.findall(c_ligne) # recherche des correspondances de la Regex dans la ligne en cour
    		if liste_cores_ligne is []:
    			pass
    		elif liste_cores_ligne is not []:	
    			dic[i+" : "+str(j)+ c_ligne]=liste_cores_ligne		 # ajout du compteur de ligne 'j' et de la liste de corespdance ds le diction d retour "dic"
    			#print(liste_cores_ligne)
    			j+=1 
    		else:
    			print("aucune correspondance dans le fichier")	
    	f.close()				   # Fermerture du fichier a la fin d'analyse du ficiher
    	return dic				   # on retourne le dictionnaire a la fin de l'analyse
    
    for fichier in liste_fichier:        # Pour chacun des fichiers dans la liste de fichier,
    	dico_de_retour=fonction_parcour(regex,fichier)  # on appel la fonction de parcours sur chaque fichier
    	print("fin d'analyse du fichier {}".format(fichier.strip(os.getcwd())))
    	for cle,valeur in dico_de_retour.items():
    		print(cle,"=",valeur)
    
    print("#########################")
    print("#exo de rech_expr       #")		
    print("#  26-11-2015 Pytohs    #")
    print("#########################")

  • #2
    Bonsoir,

    Je tenterais bien rapidement les générateurs

    Code:
    import re
    import os
    
    class PathError(Exception):
        pass
    
    def findMatch(regex, path):
        if not os.path.exists(path):
            raise PathError
        
        with open(path) as f:
            data = f.read()
            for i, line in enumerate(data.splitlines()):
                if re.search(regex, line):
                    yield (i, line)
        
    for res in findMatch("L.*s", "data1.txt"):
        print(res)

    Commentaire


    • #3
      oui je n'y avais pas pensé et du coup je pense que je vais devoir revoir le chapitre du cours sur les générateurs

      Commentaire


      • #4
        fred a tout dit, je te laisse un lien : http://www.dsimb.inserm.fr/~fuchs/py...on-node14.html

        Je ne connaissais pas ce type de travail avec python, merci je vais regarder.

        Commentaire

        Chargement...
        X