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 à lexpression 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.
Lexpression 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 à lexpression 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.
Lexpression 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