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.
É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("#########################")
Commentaire