0
votes

Comment supprimer une ligne avec un motif spécifique si elle existe dans une variable

J'utilise la bibliothèque Python paramiko pour exécuter une commande à distance et obtenir la sortie. Cependant, sur certains serveurs, je reçois également un message de connexion. Je souhaite supprimer ce message de connexion:

{'A': {'host_role': 'DB Server'}}

J'obtiens la sortie ci-dessus. J'ai tronqué la deuxième partie du dictionnaire. Je veux supprimer la première ligne si elle existe de la variable. J'ai trouvé des messages pour supprimer des lignes d'un fichier, mais pas d'une variable.

Production attendue:

FILE_OUTPUT = '''
Last login: Mon Nov  9 06:17:39 UTC 2020 from xyz.abc.com on ssh
{'A': {'host_role': 'DB Server'}}
'''


0 commentaires

5 Réponses :


0
votes

Cela pourrait être fait facilement

RESULT = dict('\n'.join(FILE_OUTPUT.split('\n')[1:]))

Cela sautera la première ligne

Si vous souhaitez créer la chaîne dans un dictionnaire, vous pouvez simplement modifier le code

RESULT = '\n'.join(FILE_OUTPUT.split('\n')[1:])


0 commentaires

1
votes

Je vais trouver le premier { et le dernier } et utiliser ast pour le ast en dictionnaire. Nous pouvons également utiliser json.loads mais vous devrez remplacer les guillemets simples par des guillemets doubles.

import ast

if '{' in FILE_OUTPUT:
    first = FILE_OUTPUT.find('{')
    last = FILE_OUTPUT.rfind('}') + 1

    results = ast.literal_eval(FILE_OUTPUT[first:last])

    print(results)
    # {'A': {'host_role': 'DB Server'}

    # using json instead of ast.literal_eval
    # assuming `import json`

    results = FILE_OUTPUT[first:last]
    print(json.loads(results.replace('\'','"')))


0 commentaires

1
votes

Faites une boucle sur les lignes, en filtrant les éléments que vous ne voulez pas, puis recollez-les (ou conservez-les simplement sous forme de liste de lignes).

FILE_OUTPUT = ''.join[line for line in FILE_OUTPUT.splitlines() if not line.startswith('Last login: ')]


0 commentaires

0
votes
{'A': {'host_role': 'DB Server'}}

0 commentaires

0
votes

Beaucoup de solutions supposaient que la première ligne devait être ignorée. Cependant, la question dit clairement si elle existe.

{'A': {'host_role': 'DB Server'}}

Production:

FILE_OUTPUT = '''
Last login: Mon Nov  9 06:17:39 UTC 2020 from xyz.abc.com on ssh
{'A': {'host_role': 'DB Server'}}
'''
for i in FILE_OUTPUT.splitlines():
    if not "Last login" in i:
        print i


0 commentaires