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
|
def Recherche(bibli, motARechercher, fenetre, listText, file = '/', fileName = '/', premiereRecurrence = True) :
''' Fonction recursive qui recherche des livres selon un mot'''
if premiereRecurrence == True : # pour ne pas que ça se lance lors de la récursion
for texteACacher in listText :
texteACacher.pack_forget() #efface les précédents résultats affichés par la fonction de recherche si elle a été lancé précedemment
fileCopy = file #on sauvegarde le chemin de départ
fileNameCopy = fileName #on sauvegarde le chemin de départ
for livreOuSousBibli in os.listdir('bibliotheque' + file) :
if os.path.isdir('bibliotheque' + file + livreOuSousBibli): # un sous dossier équivaut à une sous-bibliotheque
file += livreOuSousBibli + '/' # on modifie le lien
fileName += livreOuSousBibli[:-3] + '/' # on modifie le lien (-3 pour enlever le nombre qui correspond à la position
# d'une sous-bibliothèque et qui est à la fin du nom du dossier représentnat la sous-bibli)
Recherche(bibli[livreOuSousBibli[:-3]], motARechercher, fenetre, listText, file = file, fileName = fileName, premiereRecurrence = False) # on lance la récursion pour le faire aussi pour les livres dans la sous-bibli
else :
if livreOuSousBibli != '.DS_Store' : # fichier caché sur mac qui est lu par 'listDir' et qui m'a fait perdre de nombreuses heures pour trouver le problème
f = open('bibliotheque' + file + livreOuSousBibli, 'r') #on ouvre un fichier txt correspondant à un livre
lignes = f.readlines()
ensembleDesMots = " ".join(lignes)
ensembleDesMots = ensembleDesMots.replace('\n', '')
ensembleDesMots = ensembleDesMots.split(' ') # on créer ainsi une liste qui contient tout les mots de tout les livres de la bibliothèques
pasDeuxFois = True
for mot in ensembleDesMots : #pour chaque mot :
if mot == motARechercher and pasDeuxFois == True :
# on vérifie si c'est le mot qu'on souhaite rechercher,( pas deux fois permet que si le même livre contient plusieurs fois le mot à rechercher, il ne s'affiche qu'une fois)
pasDeuxFois = False
textAffiche = Label(fenetre, text = 'bibliotheque' + fileName + livreOuSousBibli[:-4]) #le -4 sert à enlever le .txt du fichier qui représente le livre
textAffiche.pack() #affiche le chemin du livre qui contient le le mot souhaité
listText.append(textAffiche) #stocke les labels affichés pour pouvoir les supprimer par la suite
f.close()
file = fileCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart
fileName = fileNameCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart |
Partager