IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Fonction pour rechercher un nom précis dans une liste


Sujet :

wxPython

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Fonction pour rechercher un nom précis dans une liste
    Salut,
    J'aimerais pouvoir trouver le mot exacte dans un fichier .
    Je trouve le mot en faisant la recherche, mais je n'ai pas seulement le résultat du mot exacte entré dans la fonction textEntry.
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    def search(self, evt):
    #nmf est nom de mon fichier
      nmf = 'dico.rob'
    #db est un variable quelconque, don le nom de mon fichier et un paramètre r pour read 
      db = file(nmf,'r')
    #Db.readlines pour lire tous les lignes. A ne pas oublier le s a la fin de line
      liste = db.readlines()
     
    #Db.close veut dire fermer le fichier.
      db.close()
      n = wx.TextEntryDialog(self,"Entrez le mot ici","",style = wx.OK | wx.CANCEL | wx.CENTRE)
    #afficher la fenêtre tant et aussi longtemps que l'on ne la fermera pas
      reponse = n.ShowModal()
    #Récupération du text entré
      nn = n.GetValue()
      nn = nn.lower()
      if reponse != wx.ID_OK or n == "":
     
      #if (reponse != wx.ID_CANCEL) :
       winsound.PlaySound('test.wav', winsound.SND_NODEFAULT)
       return
      elif (len(nn) <= 2) : # pas de recherche pour moins de 3 lettres
       return
       #db.close()
     
     #recuperation du nombre en string
      for i in liste:
    #On remplace la ligne encodelatin par celle-ci avec la nouvelle version de wx.
       if i.find(nn) <>-1:
     
       #if i.find(nn.encode("latin-1")) <> -1:
        winsound.PlaySound('wav/bing.wav', winsound.SND_NODEFAULT)
     
        n = wx.MessageDialog(self, "le résultat est:  "+i,"", wx.OK | wx.CANCEL | wx.CENTRE) 
        n.ShowModal()
        n.Destroy()

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    salut regimari,
    Si je comprends bien, find() retourne “trop” de lignes (i.e. des lignes qui ne devraient pas être “matchées”)?

    As-tu essayé le module re (expressions régulières) de python? il me semble bien plus adapté que n’importe quoi d’autre, pour de la recherche de texte!

    Bastien

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Salut,
    Merci pour m'avoir répondu.
    Pourrais-tu me donner le lien ou je pourrais trouver ce dont tu parle?
    J'ai finalement résolu le problème en acceptant de créer un fichier HTML dans lequel j'includ la réponse de ma recherche, mais j'ai plusieurs choix donc je les ai réduit en demandant de ne pas inclure au moins les 3 premières lettres du mots ce qui réduit un peu la recherche.
    C'est en forme de dictionnaire que je fais cette recherche et je voulais vérifier si un mot était bien épellé ou encore si le mot existe dans le dictionnaire et comme résultat si je faisais la recherche de feuille par exemple, je pouvais avoir comme résultat tous les mots qui contient le mot feuille a l'intérieur du mot.
    J'ai donc restrain la recherche enexcluant les 3 premières lettres et cela fonctionne assez bien.
    regimari

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Salut,

    Pour le module d’expressions régulières re, il est tout simplement inclus par défaut dans Python – donc suffit de faire un dans n’importe quel programme python pour pouvoir l’utiliser (la syntaxe est assez proche des regex de Perl ou PHP, de toute façon, il est très bien documenté dans la doc officielle de Python – pour python 2.6 et pour python 3.1).

    À mon avis, surtout si le dico est assez gros, les regex devraient être beaucoup plus performantes

    Bastien

    PS: désolé pour le retard…

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Merci bien, c'est apprécié!
    Citation Envoyé par mont29 Voir le message
    Salut,

    Pour le module d’expressions régulières re, il est tout simplement inclus par défaut dans Python – donc suffit de faire un dans n’importe quel programme python pour pouvoir l’utiliser (la syntaxe est assez proche des regex de Perl ou PHP, de toute façon, il est très bien documenté dans la doc officielle de Python – pour python 2.6 et pour python 3.1).

    À mon avis, surtout si le dico est assez gros, les regex devraient être beaucoup plus performantes

    Bastien

    PS: désolé pour le retard…

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/07/2010, 18h02
  2. Réponses: 2
    Dernier message: 06/05/2010, 15h55
  3. Réponses: 12
    Dernier message: 09/11/2009, 19h56
  4. Recherche de mot précis dans une suite de mot
    Par Adrien38240 dans le forum C
    Réponses: 4
    Dernier message: 02/06/2008, 11h25
  5. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo