1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| 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() |
Partager