0/5 (1 avis)
Snippet vu 7 355 fois - Téléchargée 21 fois
import os.path from Tkinter import * import tkFileDialog class SearchChar: def __init__(self, parent): """Initialisation de l'IGU""" self.parent=parent self.parent.title('Recherche de chaine dans des fichiers') self.initialDir="D:\\Sauvegardes\\Python\\test" self.port='\\' self.fileOut=[] self.menuBar() self.container1=Frame(self.parent) self.container1.pack(fill=X) self.label1=Label(self.container1,text='Entrez la chaine recherchee') self.label1.pack(side='left',fill=X) self.entry1=Entry(self.container1) self.entry1.pack(side='left',expand=YES,fill=X) self.button2=Button(self.container1,text= "Effectuer la recherche",command=self.searchCode) self.button2.pack(side='left',fill=X) self.container3=Frame(self.parent) self.container3.pack(fill=BOTH) self.interface=Text(self.container3) self.interface.insert('end','Bonjour et bienvenu\nPour tout renseignement tonny.rosca@gmail.com\n...') self.interface.pack(side='left',expand=YES,fill=BOTH) self.yscrollbar=Scrollbar(self.container3) self.yscrollbar.pack(side='right',fill=Y) self.container4=Frame(self.parent) self.container4.pack(fill=X) self.buttonExit=Button(self.container4,text="Quitter",command="exit") self.buttonExit.pack(fill=X) def menuBar(self): """Initialisation de la barre de menu""" self.menu=Menu() self.fichier=Menu() self.fichier.add_command(label='Enregistrer sous',command=self.saveWork) self.fichier.add_command(label='Quitter',command="exit") self.menu.add_cascade(label='Fichier',menu=self.fichier) self.executer=Menu() self.executer.add_command(label='Choisir un repertoire de recherche',command=self.parentPath) self.executer.add_command(label='Effectuer la recherche',command=self.searchCode) self.executer.add_command(label='Afficher le rapport',command=self.printResult) self.menu.add_cascade(label='Outils',menu=self.executer) self.aide=Menu() self.aide.add_command(label='A propos...',command=self.aboutVersion) self.aide.add_command(label='Aide',command=self.aboutAuthor) self.menu.add_cascade(label='?',menu=self.aide) self.parent.config(menu=self.menu) def saveWork(self): """Sauvegarde des resultats""" try: self.pathOut=tkFileDialog.asksaveasfilename() self.interface.insert('end','Ecriture des donnes dans le fichier '+str(self.pathOut)+'\n...') self.outputFile=open(self.pathOut,'w') self.outputFile.write('La chaine '+str(self.chaine)+' a ete trouvee dans le(s) fichier(s) suivant(s) :\n') for i in range(0,len(self.fileOut)): self.outputFile.write(str(self.fileOut[i])+'\n') self.outputFile.close self.interface.insert('end','Traitement effectue avec succes\n...') except: self.interface.insert('end','Erreur lors de la sauvegarde du fichier\n...') self.yscrollbar.config(command=self.interface.yview) def aboutAuthor(self): """Joindre l'auteur""" self.interface.insert('end','Pour tout renseignement tonny.rosca@gmail.com\n...') self.yscrollbar.config(command=self.interface.yview) def aboutVersion(self): """Version""" self.interface.insert('end','Recherche de chaine V2.0\n...') self.yscrollbar.config(command=self.interface.yview) def parentPath(self): """Choix du repertoire parent via une boite de dialogue""" self.pathIn=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.initialDir,title='Choisissez un repertoire de recherche') self.interface.insert('end','Repertoire de recherche : '+str(self.pathIn)+'\n...') self.yscrollbar.config(command=self.interface.yview) def searchCode(self): """Recherche dans le repertoire et les sous repertoires 'path' la chaine de caractere 'chaine' et retourne une liste des chemins vers les fichiers ou la chaine a ete trouvee. La variable 'port' permet de porter ce script de linux a windows en un clin d'oueil ;-)""" self.fileOut=[]#Initialisation d'une liste representant les chemins vers fichiers ou la chaine a ete trouvee self.chaine=self.entry1.get() error=0 for root, dirs, fileIn in os.walk(self.pathIn): #Lecture des differents fichiers du repertoire root for i in range(0,len(fileIn)): try: #'Lecture du fichier' fileIn[i],'situe dans le repertoire',root fichier=open(root+self.port+fileIn[i],'r')#Ouverture du fichier self.data=fichier.read()#Lecture des donnees sauvegardees sous forme de liste if self.data.count(self.chaine):#Teste si la chaine est contenue dans le fichier #'La chaine a ete trouvee',data.count(chaine),'fois.' self.fileOut=self.fileOut+[root+self.port+fileIn[i]] self.interface.insert('end','La chaine a ete trouvee '+str(self.data.count(self.chaine))+' fois dans le fichier '+root+self.port+fileIn[i]+'.\n...') fichier.close()#Fermeture du fichier except: self.interface.inset('end','Le fichier '+root+self.port+fileIn[i]+' n a pas ete traite correctement.\n...') error=error+1 self.interface.insert('end','Traitement termine, '+str(len(self.fileOut))+' fichier(s) detecte(s) contenant la chaine '+str(error)+' erreur(s) detectee(s).\n...') self.yscrollbar.config(command=self.interface.yview) def printResult(self): """Affiche la liste des fichiers trouves contenant la chaine dans l'interface utilisateur""" if self.fileOut: for i in range(0,len(self.fileOut)): self.interface.insert('end',self.fileOut[i]+'\n...') else: self.interface.insert('end','Aucun fichier en memoire\n...') self.yscrollbar.config(command=self.interface.yview) root=Tk() myapp=SearchChar(root) root.mainloop()
21 juin 2007 à 11:13
Si quelqu'un sait comment faire pour que la zone de texte s'agrandisse selon l'axe vertical lorsqu'on maximise la taille de la fenêtre, ce serait gentil de me le faire savoir ;-)
Merci d'avance.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.