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 :

Formater un fichier pour l'exploiter


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Par défaut Formater un fichier pour l'exploiter
    Bien le bonjours à tout les adorateur de python !

    Je dois déployer dans ma boite, psshutdown qui permet l'extinction des postes Windows à distance. Cela permettrais de réaliser des économie d'énergie
    C'est un programme qui requier simplement, le nom ou l'ip des machines le tout dans un fichier texte, et il s'occupe du reste.

    Seulement, j'aimerais évoluer la chose, car le script serais déployer sur de nombreuses machines
    Je m'explique

    Je récupère le nom des machines concerné dans l'Active Directory (par l'intermédiaire d'un script batch, car je n'ai pas trouver comment faire avec python).
    Un fichier par Unité d'Organisation (exemple: pc_secteur1.txt, pc_secteur2.txt ....)
    Je concatène les différents fichiers en un seul, en ajoutant le secteur auquel il apartiènne sur la ligne de forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "nom_de_la_machine1";"secteur"
    "nom_de_la_machine2";"secteur"
    "nom_de_la_machine3";"secteur"
    Jusqu'a là tout va bien

    J'aimerais pouvoir travailler avec ce fichier, et rajouter des chose sur les ligne que je désire, seulement j'ai l'impression de prendre le mauvais chemin.

    Mon but serais de faire des ping sur les machines de tout le fichier et d'ajouter le résultat (OK ou KO) de forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "nom_de_la_machine1";"secteur";"ping1";"ping2";"ping3"
    "nom_de_la_machine2";"secteur";"ping1";"ping2";"ping3"
    "nom_de_la_machine3";"secteur";"ping1";"ping2";"ping3"
    Seulement je ne sais pas comment ecrire mes résultat sur les lignes désirés.
    Cela me permétrais de travailler avec un fichier formaté

    Aussi quand je fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Fichier = open('pctest.txt', 'a')
     
    t = Fichier.readline(13)
    print t
     
    t = obFichier.readline(13)
    print t
    Il ne me prend pas les 13 caractères ou du moins il fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "nom_de_la_machine1"
    ;"secteur";
    au lieux de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "nom_de_la_machine1"
    "nom_de_la_machine2"
    "nom_de_la_machine3"
    Je vais dejà m'arréter là pour mes problèmes
    En vous remerciant d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Pour lire ton fichier je te propose la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    line=Fichier.readline()  #Lecture de la ligne de ton fichier
    while 1:   #Boucle infini
        if line=="":          #Si on fini le fichier, on sort de la boucle
            break 
        else:
            line=line[0:-1] #On se debarasse du charactere "Fin de ligne (\n)"
            liste=line.split(";") #Creation d'une liste contenant les différents élément de ta ligne séparé par un ;
            print liste[0]
            line=Fichier.readline()  #Lecture de la ligne de ton fichier
    A chaque passage de la boucle while tu aura donc une liste avec le format de donnée suivant:
    [nom_machine,secteur] (et eventuellement plus si tu ajoute des infos a chaque ligne)

    (ici on imprimera simplement le nom de la machine pour toutes les lignes du fichier)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Par défaut
    Whouaahh niquel ju_bicycle

    Tout simplement ton bout de code marche Niquel !! (je vai sle garder au chaud)
    Je n'aurais pas pensé à prendre le problème sous cet angle.

    Donc au final "liste" deviens un tableau ?"

    Comment ajouter des information sur une ligne alors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste[3].write("pingOK")
    Me retourne out of the range (normal).

    Si je ping un nom de machine, j'aimerais que le script inscrive à la suite de la ligne OK ou NOK (grace à une fonction que j'ai écrie)

    Je ne comprend pas comment travailler avec "liste", car quand j'appel celui-ci il me retourne la totalité du fichier, et donc l'impossibilité de travailler ligne par ligne

    Par la suite il faudra que j'éclate le fichier en plusieurs partis pour permettre des ping parallèle car beaucoup de machine (j'ai bien dit par la suite )

    Pardonne moi mon noobisme, mais je découvre python et c'est l'une des première fois ou je travaille avec un fichier formaté

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    hello
    Donc au final "liste" deviens un tableau ?"
    Oui tout a fait: Ici j'ai utilisé la méthode "split" qui transforme une chaine de caractère en liste en utilisant comme caractère séparateur celui que tu met entre guillemet.
    (Il y a énormément de méthode super intéressante sur les listes et les chaines de caractère je t'invite a te renseigner dessus ca aide énormément)


    liste[3].write("pingOK")
    ATTENTION 2 erreurs dans ta ligne:

    Primo python commence a compter a partir de 0, donc si tu veux toucher le troisième membre du tableau, il faut faire liste[2]

    Secundo pour l'instant liste n'a que 2 éléments, tu ne peut donc pas aller modifier le troisieme (puisqu'il n'existe pas). Heureusement il existe la méthode "append" qui permet d'ajouter un élément a une liste (illustrer plus bas)
    Je réitere mon conseil de te renseigner sur les possibilités liés aux listes et aux chaine. Le tuto de Swinnen (pages 128 et 133) donne un petit aperçu des méthodes dispos

    Pour ajouter de l'info maintenant:
    Ca dépend de ce que tu veux faire. Je propose un p'tit truc tout con: La méthode "join"
    C'est un peu le symétrique de la split: elle transforme une liste en une chaine de caractere en séparant les élément par le caractere de ton choix. Elle s'utilise comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "LE CARACTERE SEPARATEUR".join(LA LISTE A TRANSFORMER)
    ex ",".join(ma_liste)
    Ce qui donne pour ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    liste.append("Ton info")  #on ajoute a la liste l'info que tu veux ajouter
    line_to_write=";".join(liste) #utilisation de la méthode join
    Fichier.write(line_to_write)  #ecriture de la ligne dans le fichier texte
    PS: Attention dans mon code précédent, si ta derniere ligne n'est pas suivit d'un retour chariot, tu perd le dernier caractere...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Par défaut
    Bonjour,

    Juste une question au passage, il y a des tableaux dans python ?!?
    Moi qui croyait que c'étaient des listes ...

    Salutations.

    PS: Pour ajouter des éléments à la fin d'une liste, on peut utiliser la méthode append.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Par défaut
    Je te tien au jus demain, quand j'aurais tout mon temps, ça à l'air de fonctionner en tout cas.
    Thx

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Par défaut
    Merci pour vos info, j'avance à petit pas...
    Aprés quelque test j'ai des doute quand à la création de la liste à la lecture du fichier car:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print liste
    ['"nom_de_la_machine"', '"lieux"']
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print liste [0]
    "nom_de_la_machine"
    Alors qu'il devrais me retourner le nom de toute mes machine non ? Il me faudrais une liste machine, et une liste lieux ?
    J'avoue être un peut pommé là.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Je ne sais pas si c'est cela que tu veux, mais je pense que dans ton cas il faut utiliser la méthode insert concernant une liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste.insert(3, liste[3]+" pingOK") # 3 étant le n° index, sachant que le n° index commence à 0 et pas 1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Format de fichier pour Kdenlive
    Par spiwis dans le forum SUSE
    Réponses: 0
    Dernier message: 16/11/2013, 21h26
  2. format de fichier pour LOAD DATA INFILE
    Par triaguae dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/06/2010, 17h51
  3. quels format de fichiers pour l'animation DirectX
    Par korsakoff69 dans le forum DirectX
    Réponses: 6
    Dernier message: 06/07/2009, 22h44
  4. Réponses: 3
    Dernier message: 12/10/2005, 13h53
  5. Quel format de fichier utiliser pour les maps ?
    Par fb57 dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/09/2004, 20h22

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