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 :

Convertir une date directement depuis un élément d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut Convertir une date directement depuis un élément d'une liste
    Bonjour à tous,

    Je me permets de vous contacter car j'ai un petit souci avec la conversion de mes dates directement dans une liste je m'explique:

    J'utilise l'API Red Hat 5.6 Overview

    Tout d'abord j'ai ma fonction def station
    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
     
    def stations(request):
     
    #ici je récupère la clé de session
        key = request.session['key'] 
    # ensuite j'ai créée deux variable pour récupérer les éléments que me retourne la méthode de l'API à savoir client.system.listActiveSystems(key) et client.system.listInactiveSystems(key)
        sys_active = [(system['name'],system['last_checkin']) for system in client.system.listActiveSystems(key)]
        sys_inactive = [(system['name'],system['last_checkin']) for system in client.system.listInactiveSystems(key)]
    # boucle disant que pour l'élément system['last_checkin']  qui me retourne la date du système de me convertir au format suivant: 
        for system['last_checkin'] in sys_active, sys_inactive:
            date = datetime.strptime(str(system['last_checkin']), "%d/%m/%Y à %H:%M:%S")
    # je retourne mes éléments pour l'afficher en html 
        return {
                'sys_active':sys_active,
                'sys_inactive':sys_inactive,
                }
    A la sortie des listes sys_active et sys_inactive, j'ai ce retour-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [('system1', <DateTime '20150317T08:58:52' at 1cb1b00>), ('system13', <DateTime '20150317T07:39:39' at 1cb19e0>), ('system12', <DateTime '20150317T08:58:59' at 1cb1c20>)]
    Il me retourne le problème " does not match format" que j'ai bien compris. C'est ainsi que je m'adresse à vous pour m'aider à chercher une solution au problème.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Dans un cas pareil, on procède d'abord ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        for system['last_checkin'] in sys_active, sys_inactive:
            print system['last_checkin']
            date = datetime........
    Mais déjà on peut s'étonner de cette structure, dans ta boucle for sys_active, sys_inactive constituent un tuple de listes.

    Donc normalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> a = ["h", "n", "j", "k"]
    >>> b = ["l", "o", "m", "g"]
    >>> for c in a, b:
    ...     print c
    ... 
    ['h', 'n', 'j', 'k']
    ['l', 'o', 'm', 'g']
    Et si je veux un élément seul de chacune des listes, si je procède ainsi, c'est-à-dire comme toi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> for c[1] in a, b:
    ...     print c[1]
    ... 
    ['h', 'n', 'j', 'k']
    ['l', 'o', 'm', 'g']
    >>>
    pas vraiment ce que j'espérais.


    Par contre en procédant ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> for c in a, b:
    ...     print c[1]
    ... 
    n
    o
    >>>
    c'est déjà beaucoup plus clair.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    '+' permet de concaténer (si tant est que ce soit ce qu'on souhaite):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> a = ["h", "n", "j", "k"]
    >>> b = ["l", "o", "m", "g"]
    >>> for c in a+b:
    ...     print (c)
    ...
    h
    n
    j
    k
    l
    o
    m
    g
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je pense que le problème vient de ce que l'OP pense que en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sys_active = [(system['name'],system['last_checkin']) for system in client.system.listActiveSystems(key)]
    la liste sys_active contient des objets system['name'] et system['last_checkin'] ce qui est faux ce sont les valeurs associées à ces clefs qui sont placées dans la liste.

    Si je comprend bien du moins.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Merci pour les exemples mais je souhaite avant tout simplifier mon code.

    A vrai dire pour la conversion je souhaiterais convertir à la volée mon élément system[last_checkin] afin que dans mes deux listes, je puisse déja avoir l'élément date converti en 17/02/2015 à 08:13/47 et non dans le format <DateTime '20150317T08:13:47' at 3560a70> par exemple.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Bien, effectivement la structure de ma boucle n'était pas bonne.
    Du coup, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     for sys_date in sys_active, sys_inactive:
        #    date = datetime.strptime(str(system['last_checkin']), "%d/%m/%Y à %H:%M:%S")
              print sys_date[1]
    Il me retourne donc mes dates au format orginal :
    '20150317T07:39:39'
    ...
    ....etc

    Maintenant je souhaiterais pouvoir les convertir à la volée tout en les stockant dans mes 2 listes. Histoire de simplifier le code. Est-ce possible.

    C'est plutot de faire en 2 étapes avec la récupération des dates en les stockant dans une liste à part je souhaiterais directement l'inclure au format idéal dans mes deux listes déja toute faite.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2015, 15h11
  2. Réponses: 12
    Dernier message: 29/03/2012, 13h47
  3. Réponses: 11
    Dernier message: 28/04/2009, 15h58
  4. Réponses: 2
    Dernier message: 30/08/2006, 10h50

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