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 :

Problème de dictionnaire (enfin je pense).


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème de dictionnaire (enfin je pense).
    Bonjour,

    J'ai un script qui toutes les semaines se connecte à serveur pour récupérer et archiver des fichiers en erreur et les notifier dans un fichier Excel. Cela me permet ensuite de réaliser quelques retraitements statistiques basiques (erreur par mois, par équipement...).

    Afin d'automatiser le retraitement des données, je souhaiterais simuler un tableau croisé dynamique à partir des données lues dans le fichier Excel pour ensuite l'inscrire dans un nouveau fichier Excel.

    Dans un premier temps(après de très très très nombreuses tentatives), j'ai réussi à remonter et à mettre à 0 les équipements pour les années et les mois qui ne sont pas en erreur. cela me permet d'avoir des données harmonisées et d'éviter des creux entre les mois et les équipements.

    Mon problème se situe dans l'affichage des données. Lors des tests, j'obtiens ceci (résultats partiels) :

    ---> 2012 10 : EMBARQUE 15
    ---> 2012 10 : PDC 0
    ---> 2012 10 : TPV 0
    ---> 2012 10 : TPVS 12
    ---> 2012 11 : EMBARQUE 3
    ---> 2012 11 : PDC 0
    ---> 2012 11 : TPV 0
    ---> 2012 11 : TPVS 12

    alors que j'essaye d'avoir :

    --> 2012 10 : 15 0 0 12
    --> 2012 11 : 3 0 0 12

    Je pense que le problème vient de la création de la clé. N'étant pas programmeur je manque de recul et d'expérience pour saisir le point bloquant. Si une âme charitable pouvez m'aider car je commence à désespérer...

    Je laisse en pièce jointe le code et le fichier Excel me servant de tests.

    Cordialement,


    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
     
     
    import os
    import xlrd3 as xlrd
     
     
    chemin = "C:\\Users\\LoicFamilly\\Desktop\\Berty\\P.Y.M\\Tableau Croise Dynamique"
    os.chdir(chemin)
     
    mois = ["01","02","03","04","05","06","07","08","09","10","11","12"]
    machine = ["EMBARQUE", "TPVS", "TPV", "PDC"]
     
    dico = {}
     
    ouverture = xlrd.open_workbook("suivi_erreur.xls")
    feuille1 = ouverture.sheet_by_index(0)
     
    for an in range (2012,2013):
        for m in mois:
            for eq in machine:
                cle = str(an) + "_" + str(m) + "_" + str(eq)
                dico[cle] = 0
     
     
    listecle = []
     
    for element in dico:
        listecle.append(element)
     
     
    for lignes in range(1,feuille1.nrows):
        colonne = feuille1.row_values(lignes)
        vannee =  colonne[1]
        vmois = colonne[2]
        vmachine =  colonne[5]
        cle = str(vannee) + "_" + mois[int(vmois)-1] +"_" + str(vmachine)
        valeur = dico.get(cle, 0)
        valeur = valeur + 1
        dico[cle] = valeur
     
     
    listecle.sort()
     
    for i in range(0, len(listecle)):
        key = listecle[i]
        kannee = int(key[0:4])
        kmois = key[5:7]
        ktype = key[8:]
        print(" ---> ", kannee, " ", kmois, " : ",ktype, dico.get(key))
     
    os.system("pause")
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ceci n'est pas nécessaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    listecle = []
     
    for element in dico:
        listecle.append(element)
    ...
    listecle.sort()
    Ici, par contre je pense que tu confonds clé et valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for lignes in range(1,feuille1.nrows):
        colonne = feuille1.row_values(lignes)
        vannee =  colonne[1]
        vmois = colonne[2]
        vmachine =  colonne[5]
        cle = str(vannee) + "_" + mois[int(vmois)-1] +"_" + str(vmachine)
        valeur = dico.get(cle, 0)
        valeur = valeur + 1
        dico[cle] = valeur
    Je vois plutôt quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for lignes in range(1,feuille1.nrows):
        colonne = feuille1.row_values(lignes)
        vannee =  colonne[1]
        vmois = colonne[2]
        vmachine =  colonne[5]
        dico[vannee] = (int(vmois), vmachine)
    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i in range(0, len(listecle)):
        key = listecle[i]
        kannee = int(key[0:4])
        kmois = key[5:7]
        ktype = key[8:]
        print(" ---> ", kannee, " ", kmois, " : ",ktype, dico.get(key))
    on remplace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for key in dico.keys().sort():
        print(' ---> {0} {1} {2}'.format(key, dico[key][0], dico[key][1]))
    Il faudra adapter pour les valeurs réelles dont tu as besoin, mais le principe est là.
    De toutes façons fais un avant la dernière fonction pour voir ce qui se passe.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci VinsS pour vos réponses.

    Je vais reprendre le script et tenir compte de vos remarques.

    Cordialement,

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème de dictionnaire (enfin je pense)
    Bonsoir,

    En concaténant et en modifiant le code, j'ai pu obtenir le résultat escompté.
    Merci pour votre aide.

    Cordialement

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

Discussions similaires

  1. Problème d'accesseur (enfin, je pense…)
    Par CrashBC dans le forum Débuter
    Réponses: 4
    Dernier message: 07/07/2013, 12h56
  2. jedit et le charset (enfin je pense)
    Par areuh_fr dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 18/04/2007, 22h19
  3. problème de transtypage (enfin je crois)
    Par troussepoil dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 17h32
  4. [C# 1.1] Erreur GDI enfin je pense
    Par notalp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/09/2006, 15h32
  5. [CSS enfin je pense]Retour à la ligne...
    Par lietof dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 08/03/2006, 14h17

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