-1
votes

Analyser un fichier .txt pour un mot clé puis cherchez des mots-clés?

excuses pour le titre, je ne sais pas vraiment comment parler de cette question correctement.

J'ai un script qui tire la configuration de Cisco Commutateurs enregistré sur un fichier .txt et je souhaite extraire des informations clés. Vous trouverez ci-dessous un extrait de ce qui est dans le fichier .txt extrait: xxx

J'espère extraire les informations suivantes à partir du fichier ci-dessus .txt: < ul>

  • Info de l'interface (pour tous)
  • Description (si elle existe)
  • Numéro de groupe de canaux (s'il existe)

    Un exemple de sortie de ce que je suis en espérant: xxx

    et ainsi de suite ...

    ci-dessous est mon code actuel Cependant, sa ne me donne nulle part près de ce que je veux et je suis tout à partir d'idées avec mes connaissances en python limitées: xxx

    Ce retour: < Pré> xxx


  • 3 commentaires

    S'il vous plaît dites-nous ce qui ne va pas avec les résultats de votre code - votre description est extrêmement vague. Veuillez vous rappeler Comment créer un exemple minimal, complet et vérifiable et suivez-le.


    Voulez-vous qu'ils sont stockées dans des listes séparées ou juste une seule liste?


    Listes séparées idéalement


    5 Réponses :


    1
    votes

    Utilisation d'une simple itération.

    ex: strong> p> xxx pré>

    sortie: strong> p>

    [['interface GigabitEthernet0/0', 'description ** Uplink to C1 **'],
     ['interface GigabitEthernet0/1',
      'description ** Uplink to C2 **',
      'channel-group 10 mode auto'],
     ['interface GigabitEthernet0/2', 'description ** Downlink to NetAuto **'],
     ['interface GigabitEthernet0/3', 'channel-group 10 mode auto'],
     ['interface GigabitEthernet1/0'],
     ['interface GigabitEthernet1/1']]
    


    0 commentaires

    0
    votes

    Essayez:

    first_words = {'interface', 'description', 'channel-group'}
    
    res = []
    with open('input.txt') as input_f:
        d = []
        first = True
        for i in filter(lambda l: l.strip().split(' ')[0] in {'interface', 'description', 'channel-group'}, input_f):
            if 'interface' in i:
                first = False if first else res.append(d)
                d = []
            d.append(i.strip())
    


    0 commentaires

    1
    votes

    Il est très important de bien structurer les données pour une utilisation. Je suggérerais que vous utilisiez un dictionnaire pour stocker les détails de chaque interface. Ainsi, les données extraites du fichier constitueraient une liste de tels dictionnaires. Le code pour la même chose ressemblerait à ce que ceci: xxx

    Les données seront les suivantes: xxx


    1 commentaires

    C'est la solution dont j'avais besoin. Merci un bouquet Vignesh!



    0
    votes

    Le bon moyen de faire

    Vous pouvez y parvenir avec quelques lignes de code, cette solution a été détaillée est d'autres solutions, mais ce dont vous avez besoin en fait consiste à Construire un analyseur : Ce serait définitivement plus propre et durable.

    Vous pouvez trouver plus d'informations là-bas:


    1 commentaires

    Je vais examiner cela un peu plus. Merci olinox14



    1
    votes

    Gardez-le simple - divisez le fichier texte en lignes, divisez la ligne en mots, cochez le premier mot figure dans la liste des mots qui vous intéressent.

    interface Port-channel10
    interface GigabitEthernet0/0
     description ** Uplink to C1 **
    interface GigabitEthernet0/1
     description ** Uplink to C2 **
     channel-group 10 mode auto
    interface GigabitEthernet0/2
     description ** Downlink to NetAuto **
    interface GigabitEthernet0/3
     channel-group 10 mode auto
    interface GigabitEthernet1/0
    interface GigabitEthernet1/1
    


    2 commentaires

    Je reçois une erreur: Imprimer (mots_in_line [0]) IndexError: index de liste hors de portée


    Peut-être qu'il y a des lignes vides dans votre fichier, auquel cas mots_in_line sera vide. Je mettrai à jour la réponse pour traiter ce scénario.