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 :

Tri dans l'affichage d'un texte


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Points : 24
    Points
    24
    Par défaut Tri dans l'affichage d'un texte
    Je traite un projet qui consiste à analyser un fichier texte, et je ne cherche à afficher que les données dont j'ai besoin du texte d'origine.

    Voici ce que ca donne:

    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
     
     
    # -*- coding: cp1252 -*-
     
    infile="C:\\Documents and Settings\\All Users\\bru-11-r6.car.belbone.rtf"   # Varialble infile qui contient le nom du fichier d'entrée
    listeAAfficher=['']                                                         # Liste qui permet de stocker le paragraphe à afficher
    affiche=False 
    for l in file(infile):                                                      # Ouverture du fichier, fonction équivalente à open(file), la fermeture se fait automatiquement.
        lg=l.strip().split()
        if 'interface' in lg:                                                   # Récupère le premier mot choisis: ici 'Interface'. 'l' représente le mot en question.
            affiche=False                                                       # Ne reconnait pas le motif que je souhaite afficher => Affiche = False
            for element in listeAAfficher:
                if l.lower().find(element) != -1 :                              # Lower renvoit la chaine en minuscules
                    affiche=True 
        if 'description' in lg:
            if lg[1][0] not in ['3','9','0']:
                affiche=False
        if affiche: 
            print l.rstrip('\n,\par,}')                                         # Enlève les caractères non désirables. pour éviter les sauts de ligne
    Je recherche à ajouter deux condition à ce programme:

    1 - Qu'il n'affiche que les lignes qui comment par soit: 'interface' ou'description' ou 'ip adress', sinon ce n'est pas la peine.

    2- Je souhaite aussi que lorsque le programme trouve une ligne dont les condition sur la ligne description ne sont pas respectés, ainsi qu'à l'absence dune ligne avecc 'ip adress', la ligne interface ne s'affiche pas. Car comme vous l'avez peut etre remarqué, ce fichier texte cntient plusieurs lignes interfaces, dont chacune d'entre elles contient des données différentes.

    Voici un exemple du fichier en question:


    interface TenGigabitEthernet3/4
    description 901064766 cbu-pcbru16-skynet-tge34-car.belbone.be
    ip address 80.84.20.206 255.255.255.252
    interface ATM4/0/0
    description 900867919 cbu-pcbru16-atm01str11-ATM400-car.belbone.be -= BRU/11-STR02DC2 A155M 301 I =-
    bandwidth 155000
    interface ATM4/0/0.40 point-to-point
    description cbu-pcbru16-unused-car.belbone.be previous thermote TVH
    bandwidth 4096
    interface ATM4/0/0.182 point-to-point
    description 900000027 cbu-pcbru16-idnet-ATM400c182-car.belbone.be
    bandwidth 15000
    ip address 80.84.20.106 255.255.255.252
    interface ATM4/0/1
    description FREE ATM STM1
    interface Serial4/1/0
    description FREE (was 3239828 cbu-pcbru16-pecusa11-s510-car.belbone.be BRU/11-NYK/111_672N9002)
    interface Serial4/1/1
    description 003239861 cbu-bru-11-r6-s4/1/1-hngk-mga-r2-s4/0-car.belbone.be
    ip address 80.84.18.174 255.255.255.254
    interface Serial4/1/2
    description FREE T3
    interface Serial4/1/3
    description FREE T3
    interface POS4/3/0
    description FREE old 003511809 cbu-pcbru16-pecbru210-pos430-car.belbone.be
    ip address 80.84.18.121 255.255.255.254
    interface POS4/3/1
    interface GigabitEthernet5/1
    description 901137233 bru-11-r6-bru-11-r14-g-5-1
    ip address 80.84.18.34 255.255.255.254
    interface GigabitEthernet5/2
    description FREE port unavailable
    interface GigabitEthernet6/1
    description 3239808 bru-11-r6-bru-22-r15-g-6-1
    ip address 80.84.18.42 255.255.255.254
    Je pense que ce soit un problème assez facile, mais je début encore dans python. Svp j'ai besoin de la réponse rapidement. Merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    En ajoutant cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if 'bandwidth' in lg:
            affiche=False
    J'arrive à enlever la seul ligne que je ne veux pas afficher à part les trois cité précédemment. Mais cette méthode reste pas très convainquante, car en présence d'autre lignes ndésirables, il se peut qu'on oubli de citer quelques unes.
    C'est pour celà que je demmande uniquement une petite ligne qui exprimerait la requette suivante:

    Toute ligne qui ne contient ni 'interface' ni 'description' ou encore 'ip adress' ne s'affiche pas lors de l'execution.

    J'ai essayé avec cette méthode mais ca n'affiche rien au fésultat final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if 'interface' or 'description' or 'ip adress' not in lg:
    affiche=False
    J'attends toujours vos propositions concernant cette requettes et les autres citées précédemment.

  3. #3
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Citation Envoyé par anass_59 Voir le message
    J'ai essayé avec cette méthode mais ca n'affiche rien au fésultat final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if 'interface' or 'description' or 'ip adress' not in lg:
    affiche=False
    C'est normal, l'ordinateur comprend ta condition de la manière suivante :
    " si ('interface' est vrai ?) ou ('description' est vrai ?) ou ('ip adress' n'est pas dans lg ?)"

    De plus, Il faut savoir que pour python un string non-vide est vrai, de même que que tout nombre différent de zéro est vrai... donc une forme correcte aurait pu être:
    "if ('interface' in lg ) or ('description' in lg) or ('ip adress' in lg):"

    ceci dit voici le code que je te propose :
    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
    filename='X:/XX/XX.xx'
     
    BLOCK=False
    displayed_text=''
    for line in file(filename):
        line=line.lstrip()
        if line[:9]=='interface': #ouverture d'un nouveau bloc de données
            displayed_text=''
            BLOCK=True
            displayed_text+=line
        elif BLOCK:
            # si un block est ouvert, il faut verifier que la ligne obéisse aux condition d'affichage, et ferme le bloc si c'est une ligne ip
            if ('description'==line[:11]) or ('ip adress'==line[:9]): displayed_text+='  '+line
            if line[:9]=='ip adress':
                BLOCK=False
                print displayed_text

Discussions similaires

  1. Affichage d'un texte dans un document.
    Par Luffy49 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/03/2007, 19h32
  2. Ouverture fenetre + affichage d'un texte dans un champ texte
    Par fabien14 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/03/2007, 10h09
  3. Affichage différent selon texte dans une case
    Par pingoo78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 16h32
  4. [HTML] affichage d'un text brut dans un tableau
    Par fren2809 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/10/2005, 13h57
  5. Affichage d'un texte dans la barre d'état!
    Par chuart dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 12/04/2005, 12h47

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