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 :

Appel d'une liste de fonction dans une boucle


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Appel d'une liste de fonction dans une boucle
    Bonjour,

    Je suis nouveau dans le python, et plus généralement dans la prog orienté objet ^^. Je suis en train de faire un petit programme pour parser des logs et inscrire le résultat dans un fichier excel.

    Grosso modo j'ai crée une fonctions par type de fichier à verifier ex: checkmedia(pathfile) l'argument dans ces fonction est tout simplement le répertoire du dis fichier.

    Le but est d'utiliser après ces fonctions pour scanner via une boucle les différents dossiers, et répercuter le retour de la fonction ( qui est une liste ) dans deux cases du tableau excel.

    Vu que nous avons différents répertoires et que ce n'est pas toujours les mêmes fichiers dans les répertoires, je me suis dis que j'allais travailler avec des listes, en faisant un système de liste de serveur avec les différents répertoires correspondant à chaque serveurs + les coordonnées des lignes excel pour chaque serveur. Et une troisieme liste avec les fonctions à appliquer par type de serveur.

    ça donne à peut pres ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    # -*- coding: latin-1 -*-
    import os,time,win32com.client
     
    chmin= "O:/dossier1/Log/"
     
    #importation des fonctions 
     
    from checkmedia import *
    from checkptlftp import *
    from checkrestore import *
    from checksav import *
    from checkclient import *
    from checkcopy import *
    from checkgback import *
    from checkload import *
     
    #programme principale de checklog4me
     
    #nom de la feuille excel
    nomdlf=time.strftime('%d%m%Y',time.localtime())
     
    filexls='c:/python32/Controle_log_semaine_120312.xls'
    xl=win32com.client.Dispatch("Excel.Application" )
    xl.Visible   = True 
    openfile=xl.workbooks.open(filexls)
    slctsh=openfile.sheets(nomdlf)
     
    #liste des différents jobs possible
    llomme=[checkmedia(chmin),checkload(chmin),checksav(chmin),checkcopy(chmin),checkgback(chmin),checkrestore(chmin),checkptlftp(chmin)]
    #
    #il y a d'autre liste ici mais vais pas flooder non plus
    #
    lvadweb=[checkmedia(chmin),checkload(chmin),checkcopy(chmin),checkgback(chmin),checkrestore(chmin),checkclient(chmin)]
     
    #liste des repertoires / coordonée des lignes
    lsrvlomme=[("1 - Lomme",5)]
    #
    #il y a d'autre liste ici mais vais pas flooder non plus
    #
    lsrvvadweb=[("2741 - VAD",169),("2746 - WEB",178)]
     
    #fonction pour checking
    def checkitforme(lsrv,ljobs):
     
            for path,nbligne in lsrv:
                     i=0
                     chmin= chmin + path
                     while i<len(ljobs) :
                             rep=ljobs[i]
                             slctsh.Cells(nbligne,4).Value = rep[0]
                             slctsh.Cells(nbligne,5).Value = rep[1:]
                             i+=1
                             nbligne+=1
     
     
     
    checkitforme(lsrvvadweb,lvadweb)
     
    #fermeture et sauvegarde du fichier excel
    Bon le programme n'est pas fini mais ça bloque là, en fait d’après ce que j'ai pu voir et comprendre quand je crée les listes avec les jobs à l'intérieur, celles ci s’exécute à ce moment là ... le truc c'est que je voudrais qu'elle s’exécute dans la boucle de la fonction "checkitforme" car c'est dans cette boucle là que l'argument de ces fonction (chmin) est complété ....

    Je ne sais pas si je suis clair ... j'ai essayé de m'amuser avec les variable globale pour régler le problème du chemin mais cela n'a pas l'air de fonctionner ...

    Si vous avez deux trois éclaircissement cela m'aiderais beaucoup

  2. #2
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Juste une question: <chmin> varie t'il d'une fonction à l'autre (ici il me semble que non)?

    bref, pour la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    llomme=[checkmedia(chmin),checkload(chmin),checksav(chmin),checkcopy(chmin),checkgback(chmin),checkrestore(chmin),checkptlftp(chmin)]
    pour que chaque fonction soit éxécutée(exécutable) plus-tard il faut se servir de fonctions-lambda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    llomme = [lambda : checkmedia(chmin), lambda checkrestor(chmin), ...]
    et ensuite on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for func in llomme:
        func()
    Sinon, vu que toutes les fonctions de llomme prennent le même nombre d'arguments, et le même argument, il serait possible de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    llomme = [checkmedia, checkrestor, ...]
    et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for func in llomme:
        func(chmin)
    mais cette méthode n'est correcte que si le chmin est le même pour toutes les fonctions.


    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    anéfé , la variable chemin est la meme pour toute les fonctions

    et "c'est exactement ce que je voulais faire" !!

    merci beaucoup ! j'ai plus qu'a trouvé pourquoi les fonctions agissent différemment quand je les importe que quand elles sont à l’intérieur du programme et je serais heureux pour la vie ! C'est bien sympa le python.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Pourquoi ne pas simplement utilisé quelque chose comme ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def somme(a,b):
        return a+b
     
    def produit(a,b):
        return a*b
     
     
    liste = [somme,produit]
     
    for f in liste :
        print f(2,3)
    A+

    Npx

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 885
    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 : 3 885
    Points : 7 233
    Points
    7 233
    Par défaut
    Pourquoi ne pas simplement utilisé quelque chose comme ca ?
    C'est exactement ce qu'à proposer afranck64
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Oulà,

    j'étais pas très réveillé

    ++

Discussions similaires

  1. Réponses: 13
    Dernier message: 13/09/2014, 14h59
  2. [XL-2010] Date de début/fin dans une liste en fonction d'une période
    Par beloquinto dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 25/02/2014, 00h07
  3. Réponses: 2
    Dernier message: 08/10/2013, 13h54
  4. Réponses: 0
    Dernier message: 09/11/2010, 15h43
  5. Réponses: 2
    Dernier message: 11/09/2007, 11h15

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