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 :

résultat -> liste [Python 2.X]


Sujet :

Python

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 42
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    J'ai découvert un problème et j'ai donc du revenir sur ma fonction get_history.

    Un paramètre est apparu : history. history peut avoir comme paramètre: 0,1,2,3 ou 4. Cela correspond à des formats( float, string, texte, integer,log)
    j'ai rajouté une boucle qui va parcourir ses paramètres pour trouver celui qui correspond à chaque items. ex: item2 est de type float, donc il a pour paramètre 0.

    Je remet le code avec une série de débug grâce à print.

    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
    def get_history(url = "https://toto.net/zabbix/api_jsonrpc.php", username = "titi", password = "tata"):
            auth = authenticate(url, username, password)
            items = get_item(url, username, password)
     
            resultat = []
            for item in items:
                    print item #va m'indiquer l'item utilisé
                    x = 0
                    while x < 5:
                            print x  #va m'indiquer la valeur de x
                            values = {'jsonrpc': '2.0','method': 'history.get','params': {'output':'extend','history':x,'itemids':item,'sortfield':'clock','sortorder':'DESC','limit':1},'auth':auth,'id': '0'}
                            data = json.dumps(values)
                            req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})
                            response = urllib2.urlopen(req, data)
                            output = json.loads(response.read())
                            print output['result']  #va m'indiquer ce je trouve dans result
                            if  output['result'] != []:
                                    resultat.append(output['result'][0]['value'])
                                    print output['result'][0]['value']   #renvoie la valeur dans result
                            else:
                                    resultat.append(None)
                                    print None    #renvoi None, si on ne découvre aucune valeur
                            x+=1
            return resultat
    Le code passe en revu chaque paramètre history pour voir celui qui correspond à l'item et donc lui retourne sa valeur. (Certains items n'ont aucune valeur)
    Voici le résultat du débug:

    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
    24043 #item
    0 #1er paramètre
    [{u'itemid': u'24043', u'ns': u'663695951', u'value': u'0.2255', u'clock': u'1405956283'}]  #output['result']
    0.2255 #valeur
    1
    []
    None
    2
    []
    None
    3
    []
    None
    4
    []
    None
    #item suivant
    24049
    0
    []
    None
    1
    []
    None
    2
    []
    None
    3
    []
    None
    4
    []
    None
    24033
    0
    []
    None
    1
    []
    None
    2
    []
    None
    3
    [{u'itemid': u'24033', u'ns': u'242415203', u'value': u'32768', u'clock': u'1405953633'}]
    32768
    4
    []
    None
    Vous l'aurez compris, des qu'il n'y a pas de valeur dans result, il met none.
    Plus visuel, ça me donne cette liste(chaque couleur correspond à un item):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ u'0.2255', None, None, None, None, None, None, None, None, None, None, None, None, u'32768', None]
    Alors que moi je désire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ u'0.2255', None,  u'32768']
    Comment retravailler ma demande pour avoir le résultat attentu?

    Merci d'avance

  2. #22
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chattam Voir le message
    Bonjour,
    Une fois suffit tu sais. Comme dans la vraie vie. Tu ne dis pas "bonjour" à chaque nouvelle phrase dans une discussion, si ???
    Citation Envoyé par chattam Voir le message
    Plus visuel, ça me donne cette liste(chaque couleur correspond à un item):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ u'0.2255', None, None, None, None, None, None, None, None, None, None, None, None, u'32768', None]
    Alors que moi je désire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ u'0.2255', None,  u'32768']
    Comment retravailler ma demande pour avoir le résultat attentu?
    Ben c'est pas compliqué à comprendre pourquoi (c'est d'ailleurs même assez élémentaire). Tu remplis resultat dans la boucle interne (celle qui examine les history). Donc 5 history donneront 5 résultats pour un item.

    Faut traiter l'item dans la boucle interne mais remplir resultat en dehors de cette boucle. Pour chaque item traité tu initialises une variable spécifique à None. Puis, tu examines tes 5 history. Si l'un deux correspond à ton item tu places alors l'item en question dans ladite variable.
    Et en final tu places la variable dans ton tableau résultat. Un truc comme ceci

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for item in items:
        value=None
        for x in xrange(5):
            output = json.loads(response.read())
            if  output['result'] != []:
                value=output['result'][0]['value']
        # for
        resultat.append(value)
    # for

    Ceci dit, je ne vois pas à quoi sert x vu que tu ne l'utilises pas dans ta boucle interne. Et faudra revoir un peu tes commentaires. Parce que print x # va m'indiquer la valeur de x c'est pas super utile. Vaut mieux dire ce que toi tu cherches à faire plutôt que traduire l'action spécifique de telle ou telle instruction...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Vxi3] Résultat partiel liste valeurs en invite
    Par samy37 dans le forum Webi
    Réponses: 9
    Dernier message: 24/11/2015, 08h59
  2. Recherche retournant plusieurs résultats dans liste déroulante
    Par Akhlan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/01/2013, 04h02
  3. Recherche retournant plusieurs résultats dans liste déroulante.
    Par Yann56 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/01/2010, 01h49
  4. Résultats de List<>
    Par punisher999 dans le forum C#
    Réponses: 1
    Dernier message: 23/01/2009, 15h44

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