Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3081 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Python] Récupérer l'avant dernière chaine de caractère d'un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Python] Récupérer l'avant dernière chaine de caractère d'un tableau

n°2324858
kill9
Il a été tué vivant.
Posté le 27-11-2018 à 18:33:22  profilanswer
 

Bonjour,
 
Je dois récupérer l'avant dernière chaine de caractère d'un tableau.
J'ai bien essayé un "print ligne_cmd [-2]", mais je ne récupère qu'un caractère et de la chaine en cours.
 
Y a t'il une autre façon d'afficher toute la chaine ?
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 27-11-2018 à 18:33:22  profilanswer
 

n°2324867
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 10:23:26  profilanswer
 

Bon, visiblement, soit mon post n'est pas assez explicite, soit il n'est pas assez sexy.
 
Le problème est le suivant.
Je lis les lignes d'un fichier de commande que je passe dans une boucle.

Code :
  1. for cmd_cisco in file2.readlines() :
  2.                                 ligne_cmd = []
  3.                                 ligne_cmd.append(cmd_cisco.rstrip('\n'))
  4.                                 tn.write(cmd_cisco)
  5.                                 i = tn.expect(['% Invalid input detected at .*','.*#'])
  6.                                 if i[0] == 0 and Check == 0:
  7.                                         fichier = open("liste-erreur.txt", "a" )
  8.                                         fichier.writelines(Host_sansrc)
  9.                                         fichier.writelines(' KO')
  10.                                         fichier.write("\n" )
  11.                                         fichier.close()
  12.                                         print ligne_cmd[1:-2]      <----- le problème est ici


 
Si dans le fichier de commande, j'ai la liste suivante
sh clock
sh toto
sh ver
 
le résultat de "print ligne_cmd" sera "sh ver" (si je ne spécifie pas les crochets) alors qu'il devrait être "sh toto"
J'ai essayé de faire un "print ligne_cmd[1:-2]" mais ça plante.
(0, <_sre.SRE_Match object at 0x7f0413d92d98>, "sh toto\r\n                    ^\r\n% Invalid input detected at '^' marker.\r" )
[]   <----- valeur affichée
 
 
Existe-t'il un moyen d'afficher l'avant dernière valeur dans le tableau ?


Message édité par kill9 le 28-11-2018 à 10:24:52
n°2324869
dede_sav
Posté le 28-11-2018 à 10:36:18  profilanswer
 

Bonjour,
 
Pourquoi tu fais du Python 2 ?  
Sinon, en utilisant for ... in ....readlines(), tu lis ligne par ligne, donc cmd_cisco ne contient qu'une ligne à la fois.
 
Si tu veux faire, ce que tu veux faire, et que je pense que tu veux faire:
cmd_cisco = file2.readlines()
print cmd_cisco[-2]

n°2324876
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 11:04:15  profilanswer
 

En fait, j'ai déjà essayé, le problème c'est que je ne veux afficher que la commande fausse et que la boucle fait un tour de plus avant de rentrer dans le if.
Ce qui fait que j'ai la commande suivante qui s'affiche.
Si je fais comme tu le dis, ce que j'avais déjà essayé, il m'affiche un 'r'
 
voici l'ouput
 
(0, <_sre.SRE_Match object at 0x7f95955e7d98>, "sh toto\r\n                    ^\r\n% Invalid input detected at '^' marker.\r" )
r  <- résultat du print cmd_cisco[-2]
D'où ma question sur la chaîne de caratères

n°2324878
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 11:21:27  profilanswer
 

dede_sav a écrit :

Bonjour,
 
Pourquoi tu fais du Python 2 ?  


 
En fait, je débute en Python et je ne vois pas la différence entre le 2 ou le 3.
A quoi as-tu vu que c'était du Pyhton 2 et quel serait la version plus propre ? ;)

n°2324889
dede_sav
Posté le 28-11-2018 à 11:47:14  profilanswer
 

Le print sans parenthèse indique que tu utilises Python2.
 
Serais-tu sur Centos ?  
La version recommandé est Python 3.x. C'est pas très grave de faire du Python2 vu la taille du legacy, mais c'est dommage de commencer un nouveau projet avec un langage qui va bientôt ne plus être supporté officiellement.
 

n°2324892
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 11:58:57  profilanswer
 

La version installé est la 3.6
 
EDIT:
 
Si cela peut aider, je peux injecter le script complet.


Message édité par kill9 le 28-11-2018 à 12:08:07
n°2324896
dede_sav
Posté le 28-11-2018 à 13:38:54  profilanswer
 

Non tkt, je taquine.
 
Tu peux faire montrer ce que contient file2.readlines() (si c'est pas trop secret ;)) ?
 

n°2324897
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 13:44:47  profilanswer
 

Rien de top secret, je suppose que c'est un script classique.
Je veux juste noter dans un fichier .txt l'IP de l'équipement et la première instruction qui a générée l'erreur.
 

Code :
  1. for cmd_cisco in file2.readlines() :
  2.                                 ligne_cmd = []
  3.                                 ligne_cmd.append(cmd_cisco.rstrip('\n'))
  4.                                 tn.write(cmd_cisco)
  5.                                 i = tn.expect(['% Invalid input detected at .*','.*#'])
  6.                                 #print ("Verif = " ), Verif
  7.                                 #print ("Check = " ), Check
  8.                                 #print i
  9.                                 if i[0] == 0 and Check == 0:
  10.                                         fichier = open("liste-erreur.txt", "a" )
  11.                                         fichier.writelines(Host_sansrc)
  12.                                         fichier.writelines(' KO')
  13.                                         fichier.write("\n" )
  14.                                         fichier.close()
  15.                                         print (ligne_cmd[-2])
  16.                                         Verif = 1
  17.                                         print ("I'm in" )
  18.                                         Check = 1
  19.                         tn.write("exit\n" )
  20.                         file2.close()
  21.                         print Verif
  22.                         if Verif == 0:
  23.                                 prGreen ("OK" )
  24.                         else:
  25.                                 prRed ("KO" )


 
Cette fois-ci, le "print (ligne_cmd[-2])" empêche le script de vérifier la condition et va direct sous le "except"
 
Pour l'explication, je ne rajoute pas l'instruction dans le fichier pour le moment, mais je me contente de l'afficher pour éviter d'avoir à ouvrir le fichier d'erreur.


Message édité par kill9 le 30-11-2018 à 12:50:13
n°2324898
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 13:49:07  profilanswer
 

Le fichier de commandes.txt.
 
sh clock
sh toto
sh ver
sh titi
end

mood
Publicité
Posté le 28-11-2018 à 13:49:07  profilanswer
 

n°2324900
kill9
Il a été tué vivant.
Posté le 28-11-2018 à 14:09:50  profilanswer
 

J'ai trouvé.
Résolu en déplaçant la ligne 53 "ligne_cmd = []" en ligne 46.
A partir de ce moment là, le tableau est complet (à l'affichage ['sh clock', 'sh toto', 'sh ver']) et je peux faire mon "print (ligne_cmd[-2]) sans problème
 
D'un autre coté, c'était logique. J'ai été couillon sur le coup.
 
J'initialise mon tableau au début d'une boucle.
Il ne pouvait pas conserver les autres éléments  :ange:


Message édité par kill9 le 28-11-2018 à 14:59:36

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Python] Récupérer l'avant dernière chaine de caractère d'un tableau

 

Sujets relatifs
Ecrire une variable tableau sur une feuille avec colonne masquéees[Python] Tableaux qui s'actualisent en même temps
[Python] Connection aux routeurs et détection d'erreurPython remplacer un caractère dans une chaine
VBA organisation de tableauRécupérer la date du résultat [POWERSHELL]
[POWERSHELL] Récupérer les utilisateurs sur un serveur TSE[Powershell] Récupérer SID
Plus de sujets relatifs à : [Python] Récupérer l'avant dernière chaine de caractère d'un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR