jeudi 26 novembre 2015

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



from Hackademics : Forum de hacking – hackers white hat – cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1LCQwig
via IFTTT

Aucun commentaire:

Enregistrer un commentaire