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

Python Discussion :

Recherche en python un défaut dans un texte importé (tkinter) [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien electronique
    Inscrit en
    Juin 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien electronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 10
    Par défaut Recherche en python un défaut dans un texte importé (tkinter)
    Bonjour,

    Je viens solliciter votre aide.
    Etant néophyte sur python je souhaite réaliser un petit programme.

    Cependant j'aurais besoin de vos lumières pour savoir comment procéder. Voici ce que je veux faire :
    Nom : prog python.PNG
Affichages : 188
Taille : 222,2 Ko

    Je veux pouvoir rentrer une liste de défauts, ou disons plus simplement de terme dans un fichier texte à la racine de mon programme.
    Puis pouvoir importer un fichier de .log dans ma fenetre de texte de mon GUI, et faire à laide d'un bouton "rechercher" que je vais ajouter, une recherche de correspondance entre les termes contenu dans mon ficher defauts.txt et le document importé dans ma textebox.

    Si le résultat est positif, et qu'une correspondance est trouvé, alors on affiche la ligne qui correspond dans une textbox à droite, et ainsi de suite ligne par ligne, jusqu'au bout du document.

    ---
    Le problème est que je ne sais pas comment procéder..

    Pourriez vous me donner des idées, une méthodologie ou un bout de code pour arriver à faire cela s'il vous plait?

    En vous remerciant par avance.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par Highness023 Voir le message
    Le problème est que je ne sais pas comment procéder..
    Vous devriez savoir faire ça sans tkinter.

    Et côté tkinter, vous devez avoir suffisamment travaillé sur les widget que vous voulez utiliser pour montrer un peu de code.

    note: pour avoir de l'aide, il faut pouvoir apprécier votre niveau (si on veut s'y mettre...) et que vous sachiez déjà faire un peu quelque chose (et le montrer).



    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut !

    C'est plutôt facile à mettre en œuvre, il faut que tu ouvres des tutos ça devrait le faire tout seul !

    Tu ouvres ton fichier text : https://docs.python.org/3/tutorial/i...-writing-files
    Tu lis le fichier ligne par ligne : https://docs.python.org/3/tutorial/i...f-file-objects
    Tu recherches tes mots dans chaque ligne avec deux boucles : https://docs.python.org/fr/3/tutoria...for-statements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for line in f:
        for default in defaults:
            if default in line:
                #Do something
    Tu lis un tuto pour Tkinter : https://vincent.developpez.com/cours...nter-python-3/
    Et tu mets en application ton apprentissage !

  4. #4
    Membre habitué
    Homme Profil pro
    Technicien electronique
    Inscrit en
    Juin 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien electronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 10
    Par défaut
    Bonjour,

    Merci pour vos réponses, alors j'ai avancé j'ai fais tout mon GUI

    Nom : gui.PNG
Affichages : 140
Taille : 56,3 Ko

    Maintenant je n'arrive toujours pas à faire cette boucle de lecture
    Et avant de me dire "laisse tomber" ou de m'envoyer bouler, j'ai essayer de nombreuses heures.

    Je réexplique ce que je veux faire :

    J'ai un fichier que j'ouvre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def openfile():
        global cmd_file
        cmd_file = filedialog.askopenfilename(title="Open SMW Log file", filetypes=(("Text Files", "*.log"),))
        filename = os.path.basename(cmd_file)
        path_entry.insert(END, cmd_file)
        cmd_file = open(cmd_file, 'r')
        log_data = cmd_file.read()
        log_area.insert(END, log_data)
        cmd_file.close()
    Ce fichier est mis dans la zone de texte.

    Je veux à partir d'un fichier nommé "defaults.txt", effectuer une recherche dans fichier ouvert dans le programme.

    Defauts.txt, contient des mots clefs "Overload", "fault", "Psu error" que je veux identifier dans le fichier que j'ai importé,
    Si la correspondant est TRUE, alors je veux l'afficher dans un listbox ligne par ligne (celle sous analyze)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ###### TEXTBOX DE DEFAUTS ######
    fault_box  = tk.Listbox(GUI)
    fault_box["bg"]  = "#D8D8D8"
    fault_box["borderwidth"]  = "1px"
    ft  = tkFont.Font(family  = 'Arial', size  = 10)
    fault_box["font"]  = ft
    fault_box["fg"]  = "#333333"
    fault_box["justify"]  = "right"
    fault_box.place(x  = 780, y  = 300, width  = 360, height  = 372)
    Cependant je n'arrive pas à faire fonctionner mes différents essai..
    J'ai essayer read, readlines, et d'autres choses que j'ai pu trouver...

    GUI.py

    voici mon gui

    Je voudrais juste arriver à faire ça apres j'aurais quasiment terminé mon programme, et comme vous pouvez le voir j'ai travailler le sujet depuis la dernière fois.

    Pourriez vous s'il vous plait me donner une méthode qui marcherais bien car je ne vois pas du tout comment faire.
    Je suppose qu'il faut lire mon fichier de défauts, créer une list ou une bibliothéque, et fais une sorte de lecture de cet objet dans la routine pour trouver un match.

    Mais même l'essai le plus concluant, me mettais des erreurs.

    Merci par avance de me donner un petit peu d'aide..

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Alors je pense que le plus performant sans prise de tête est de réfléchir un peu à l'envers :
    Au lieu de rechercher une liste de mots dans le texte, rechercher si les mots du texte sont dans la liste.

    L'intérêt de cette méthode ?
    Rendre le script plus rapide en évitant de parcourir le texte à chaque mot que l'on recherche.

    Je ferais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> text = "Le vieil homme palpe les peaux d’un air expert, indiquant son intérêt avec des grognements de connaisseur. Il y a des fourrures d’ours, des peaux de loup, de renard des neiges et d'hermine. Toutes sont splendides, parfaitement travaillées et sans le moindre défaut. Il y a aussi un coutelas d’ivoire, une collection de pierres de quartz de diverses couleurs - vert, jaune, rose et blanc - des outils faits d’os, de bois et de fer, et un bloc de jaspe tacheté de rouge, d’une suprême beauté. Le tout représente plusieurs saisons de travail, de recherches patientes, d’économies, d’efforts et de privations."
     
    >>> text_ = text.replace(",", " ").replace("’", " ").replace(".", " ").replace("'", " ")
     
    >>> [mot for mot in text_.split(" ") if mot in ('hermine', 'renard', 'ours', 'lion', 'loup')]
    ['ours', 'loup', 'renard', 'hermine']

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 226
    Par défaut
    hello,
    pour analyser ton fichier tu peux te servir de la chaine log_data (chargé par le fichier log) en global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def openfile():
        global cmd_file
        global log_data
    et dans ton traitement d'analyse tu lis toutes les lignes de cette chaîne et tu te sers de any pour retrouver n'importe quelle chaîne d'une liste de chaînes pour chaque ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def analyze():
        matches = [ "Overload", "fault", "Psu error"]
        fault_box.delete(0, tk.END)
        linenum = 0
        for line in log_data.splitlines():
            linenum += 1
            if any(x in line for x in matches):
                #print('ligne ' + str(linenum) + ' : ' + line)
                fault_box.insert(tk.END,'ligne ' + str(linenum) + ' : ' + line)
    et pour le scrolling dans tes widgets log_area et fault_box, je te conseille d'utiliser des megawidgets du module Pmw (présent dans Pypi) le ScrolledText et le ScrolledListBox


    Ami calmant, J.P

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par Highness023 Voir le message
    Pourriez vous s'il vous plait me donner une méthode qui marcherais bien car je ne vois pas du tout comment faire.
    On part d'un texte i.e des lignes séparées par des fins de lignes comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> text = 'aa bb\ncc dd\naa cc\n'
    puis on peut le découper en lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> lines = text.splitlines()
    >>> lines
    ['aa bb', 'cc dd', 'aa cc']
    puis on apprend à faire une boucle pour afficher n° de ligne et contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> for n, line in enumerate(lines):
    ...     print(n, '*', line)
    ...
    0 * aa bb
    1 * cc dd
    2 * aa cc
    puis on peut filtrer les lignes qui contiennent "cc":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> for n, line in enumerate(lines):
    ...     if 'cc' in line:
    ...        print(n, '*', line)
    ...
    1 * cc dd
    2 * aa cc
    Cela maîtrisé, on peut s'aventurer à remplacer "print" par l'affichage dans une Listbox tkinter ou même prendre le temps d'ouvrir la documentation du widget Text pour voir comment faire une recherche dans le texte afficher et changer la couleur des mots/lignes qui matchent.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien electronique
    Inscrit en
    Juin 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien electronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 10
    Par défaut
    Merci pour vos précieuses réponses je vais essayer tout cela !
    Je vous tient au courant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date du jour par défaut dans champ text
    Par hugodu28 dans le forum Langage
    Réponses: 6
    Dernier message: 01/04/2011, 13h03
  2. Réponses: 8
    Dernier message: 11/08/2009, 09h07
  3. La recherche s'effectue-t-elle dans le texte entre les balises [code]?
    Par franculo_caoulene dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 18/06/2009, 12h53
  4. valeur par défaut dans input text
    Par gforce dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/10/2006, 14h31
  5. Réponses: 6
    Dernier message: 14/02/2006, 20h53

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