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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [python] Extraire nom d'un ID OCS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[python] Extraire nom d'un ID OCS

n°1434309
nomiss
La rootine
Posté le 22-05-2019 à 09:30:38  profilanswer
 

Bonjour à tout le monde,

 

Je suis en train de refaire un script en python qui liste des machines qui ne sont pas màj depuis plus d'un mois. Le script extrait depuis ma BDD SQL ce jeu de données :

 

hostnameA-2015-01-01-12-50-50
hostnameB-2016-12-01-12-50-54
host-nameC-2017-05-07-12-51-23
pt-1234-2018-12-12-00-32-18
G1234-2017-11-11-05-05-05

 

A present, il faut que mon script python filtre les data en sortie, il ne devra affiché les machines qui ne sont pas :

 

host-nameC
pt-1234
G1234

 

et avec seulement le nom : hostnameA-2015-01-01-12-50-50 ==> hostnameA

 

Voilà avec quoi je bosse, j'avance petit à petit, si jamais vous avez des idées, je prend. :

 
Code :
  1. for a in data:
  2.               print a[1].split('-')[0]
  3.               nb= nb + 1
 

merci
 :hello:

  

EDIT :

 
Code :
  1. for a in data:
  2.         Z = re.split("(.*)-([0-9]{4}.*)", a[1])
  3.         print Z[1]
 

ceci me permet d'avoir une liste de nom sans les date en fin d'ID

 

hostnameA
hostnameB
host-nameC
G5656
pt-michel


Message édité par nomiss le 22-05-2019 à 11:24:26
mood
Publicité
Posté le 22-05-2019 à 09:30:38  profilanswer
 

n°1434313
Profil sup​primé
Posté le 22-05-2019 à 11:18:58  answer
 

Code :
  1. #!/usr/bin/env python
  2. import re
  3. data = [ "hostnameA-2015-01-01-12-50-50",
  4.         "hostnameB-2016-12-01-12-50-54",
  5.         "host-nameC-2017-05-07-12-51-23",
  6.         "pt-1234-2018-12-12-00-32-18",
  7.         "G1234-2017-11-11-05-05-05" ]
  8. for record in data:
  9.     m = re.search('(.+)-([0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+)', record)
  10.     print m.group(1)


Il doit exister plus simple, mais le but de la manoeuvre est de faire un match de la date et si on voit la date, on extrait le hostname, peu importe s'il comporte des caracteres bizarres.

n°1434315
nomiss
La rootine
Posté le 22-05-2019 à 11:38:03  profilanswer
 


 
 
Merci.
 
Je faisais la meme chose plus haut. Je me retrouve avec une liste ou il y a des occurences qui ne doivent pas être affichées, je bloque dessus pour le moment.

n°1434316
Profil sup​primé
Posté le 22-05-2019 à 13:00:07  answer
 

nomiss a écrit :


 
 
Merci.
 
Je faisais la meme chose plus haut. Je me retrouve avec une liste ou il y a des occurences qui ne doivent pas être affichées, je bloque dessus pour le moment.


Ben c'est ce que fais mon scriptounet  ;)
 
m = re.search('(.+)-([0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+)', record)
 
(.+)-([0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+)
 
pour le premier groupe, prend n'importe quel caractere au moins une fois
On demande d'avoir au moins un tiret ensuite
On demande a ce qui suit ressemble a une date aaaa-mm-jj-hh-mm-ss - pour le lol je l'ai aussi mis dans un groupe, si jamais tu veux le re-utiliser.

n°1434318
Ivy gu
3 blobcats dans un trenchcoat
Posté le 22-05-2019 à 13:15:31  profilanswer
 

la date et le hostname ne sont pas des champs différents dans la bdd ??


---------------
IT IS UNREFUTABLE - WHEREVER THIS TYRANT TRANSPORTS, DISASTER FOLLOWS
n°1434319
nomiss
La rootine
Posté le 22-05-2019 à 13:20:58  profilanswer
 


 
 
Regarde :  

Code :
  1. >>> import re
  2. >>> data = [ "hostnameA-2015-01-01-12-50-50",
  3. ...         "hostnameB-2016-12-01-12-50-54",
  4. ...         "host-nameC-2017-05-07-12-51-23",
  5. ...         "pt-1234-2018-12-12-00-32-18",
  6. ...         "G1234-2017-11-11-05-05-05" ]
  7. >>> for record in data:
  8. ...     m = re.search('(.+)-([0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+)', record)
  9. ...     print m.group(1)
  10. ...
  11. hostnameA
  12. hostnameB
  13. host-nameC
  14. pt-1234
  15. G1234


 
Moi il me faut que  
hostnameA
hostnameB
 
les hostnameA, B correspondent à des noms de serveurs, les pt-jeanmichel et Gxxxx correspondent à des postes utilisateurs. Je n'ai seulement besoin que des serveurs.

n°1434320
nomiss
La rootine
Posté le 22-05-2019 à 13:25:51  profilanswer
 

Ivy gu a écrit :

la date et le hostname ne sont pas des champs différents dans la bdd ??


 
Je ne sais pas la requête que je reprend est assez longue, je préfere rester focus sur python. Et comprendre comment faire du post-traitement

n°1434350
nomiss
La rootine
Posté le 22-05-2019 à 16:37:18  profilanswer
 

Du nouveau, avec ça :

 
Code :
  1. for a in data:
  2.         Z = re.split("(.*)-([0-9]{4}.*)", a[1])
  3.         match = re.search("^(pt-*)", Z[1])+re.search("^[Gg][0-9]{4}", Z[1])
  4.         if not match:
  5.                 print Z[1]


Retour :

 

hostnameA
hostnameB
G5050

 

Maintenant je dois supprimer tout les Gxxxx et gxxxx et les doublons
J'ai également une liste de serveurs dans un fichier qui doivent etre exclu.

 

Je bloque .. :/

Message cité 1 fois
Message édité par nomiss le 23-05-2019 à 11:01:56
n°1434376
Profil sup​primé
Posté le 23-05-2019 à 16:32:41  answer
 

nomiss a écrit :

Du nouveau, avec ça :
 

Code :
  1. for a in data:
  2.         Z = re.split("(.*)-([0-9]{4}.*)", a[1])
  3.         match = re.search("^(pt-*)", Z[1])+re.search("^[Gg][0-9]{4}", Z[1])
  4.         if not match:
  5.                 print Z[1]


Retour :  
 
hostnameA
hostnameB
G5050
 
Maintenant je dois supprimer tout les Gxxxx et gxxxx et les doublons
J'ai également une liste de serveurs dans un fichier qui doivent etre exclu.
 
Je bloque .. :/


 
Les doublons c'est simple: tu ajoutes non pas dans une liste mais dans un dictionnaire.
Ce qui doit etre exclu, avant d'ajouter tu fais un check 'item not in ma_liste_noire"
Ce qui commence par Gg : item[0].lower() != 'g'  ;)

n°1434398
nomiss
La rootine
Posté le 24-05-2019 à 10:25:31  profilanswer
 

Salut  
 
Merci !
 
J'ai eu quelques réponse intéressante ici : https://stackoverflow.com/questions [...] -from-list
 
Je me base sur :
 

Code :
  1. # init list
  2. datalist = [ 'servername01A-2015-05-15-13-42-25',
  3.              'servernameB02-2018-03-25-05-32-35',
  4.              'pt-clark-2018-09-25-14-10-05',
  5.              'PT-Peter-2019-01-01-12-12-05',
  6.              'G4535-2017-07-14-11-29-25',
  7.              'G4535-2017-07-14-11-29-25',
  8.              'g4535-2017-07-14-11-29-25',
  9.              'pc-rescue-2013-11-11-11-12-05' ]
  10. # 1. remove duplicates
  11. datalist = list(set(datalist))
  12. # 2. remove second part of ID
  13. for i,data in enumerate(datalist):
  14.     tmp = '-'.join([tmp_str for tmp_str in data.split('-') if not tmp_str.isdigit()])
  15.     datalist[i] = tmp
  16. # 3. remove some servers
  17. # I skipped this step since you did not provide the list of servers to exclude
  18. # 4. remove all computer which starting by G**** or g****
  19. datalist = [d for d in datalist if not d.startswith("G" ) and not d.startswith("g" ) ]
  20. # 5. remove all computer which starting by pt- or PT-, PC-, pc-
  21. for prefix in ['pt-', 'PT-', 'PC-', 'pc-']:
  22.     datalist = [d for d in datalist if not d.startswith(prefix) ]
  23. # 6. sort
  24. datalist = sorted(datalist)


 
 
Et j'essaye de faire l'étape 3.
 
 
J'avais également commencé à bosser sur la réponse d'un autre utilisateur  
 

Code :
  1. excluded = [
  2.     'benchsrv01rt',
  3.     'benchsrv02rt',
  4.     'solaris30g',
  5.     'solaris10g',
  6.     'g[0-9]{4}',
  7.     'pc-',
  8.     'pt-',
  9.     'test[0-9]t',
  10. ]
  11. excluded = '|'.join(excluded)
  12. #print(excluded)
  13. result = []
  14. for name in data:
  15.     name = name.strip()
  16.     name = name[:-20]
  17.     if not re.match(excluded, name, re.IGNORECASE):
  18.         if not in result:
  19.            result.append(name)
  20. print(result)


 
Mais je n'aimais pas l'utilisation de "name = name[:-20]"
 
Son script est plus simple ceci dit. Mais je rame pas mal. J'ai pas de connaissances solides en python...pour le moment.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [python] Extraire nom d'un ID OCS

 

Sujets relatifs
Inventorier les imprimantes et les autres périphériques avec OCSPython sur Mint: problème variable string
Monter un serveur Apache, Python 2.7, FTP - Quels logiciels utiliser?Unix Win PYTHON differences ?
Aucune remonté de mon client OCSErreur python swift client
Script python au démarrage dans /etc/init.d./rcS ?Ouverture python et executer commande
python comment afficher les emails d'un seul destinatairejaimerais avoir votre votre avis sur mon dernier projet en python
Plus de sujets relatifs à : [python] Extraire nom d'un ID OCS


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