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 :

Rangement chronologique de liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut Rangement chronologique de liste
    Bonjour,

    Voila mon problème:
    J'ai plusieurs fichiers dans un dossier, chaque fichier présente des relevés de points avec la date du relevé. Les dates ne sont pas du tout fixe ( je ne sais pas a quelle heure il a fait son relevé). Les relevés entre 2 fichiers peuvent être a des heures totalement différentes.

    J'ai réussi a isoler les dates de chaque fichier et a les stocker dans une liste pour en faire un axe des temps (pour un plot futur).
    J'ai donc une liste de dates mais rangées n'importe comment.

    Et maintenant, j'aimerais ranger chronologiquement cette liste.
    Les dates sont au format JapanUTC : 2009/01/01 00:02:54

    Est ce que vous connaissez une fonction qui fait ça bien ou est ce que je dois tout me faire a la main.... ?

    Merci pour vos futures réponses

    TeqPAF

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    heu... en utilisant sort ou sorted ?
    Tes dates sont sous forme de chaînes ? ou tu les as converties ?
    Si tu les à converties sous forme de tuples ou de listes, sort et sorted marcheront, mais il faut impérativement que l'ordre d'affichage de la date soit anglophone (YYYY/MM/DD)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> a=[(2009,02,01),(2009,01,31),(2008,12,15)]
    >>> sorted(a)
    [(2008, 12, 15), (2009, 1, 31), (2009, 2, 1)]
    >>> a.sort()
    >>> a
    [(2008, 12, 15), (2009, 1, 31), (2009, 2, 1)]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    Bon bah voila ca marche !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tupleDate = []
            for date in listDate:
                annee = date.split('/')[0]
                mois = date.split('/')[1]
                jour = date.split('/')[2].split(' ')[0]
                heure = date.split(' ')[1].split(':')[0]
                minute = date.split(' ')[1].split(':')[1]
                seconde = date.split(' ')[1].split(':')[2]
                paquet = date.split(' ')[2]
                splitedDate = [annee, mois, jour, heure, minute, seconde, paquet]
                tupleDate.append(splitedDate)
            tupleDate = sorted(tupleDate)
    Merci beaucoup !

    TeqPAF

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    De rien, mais j'avais oublié un mot, donc le sens de la phrase n'est complètement celui que je voulais... bref, ce que je voulais dire, c'est que si c'est des chaines, ça marche tout aussi bien

  5. #5
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    pourquoi ne pas profiter des libs disponibles?
    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
    import datetime
     
    dirty_dates = ['2009/01/01 10:00:25', '2008/12/12 01:00:00',
            '2008/12/12 00:50:00', '2009/06/02 20:35:00']
     
    dates = []
    format = "%Y/%m/%d %H:%M:%S"
    for date in dirty_dates:
        d = datetime.datetime.strptime(date, format)
        dates.append(d)
     
    order_dates = sorted(dates)
    format = 'fichier generer le %d/%m/%Y a %Hh %Mmin %Ssec'
    for date in order_dates:
        print date.strftime(format)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier generer le 12/12/2008 a 00h 50min 00sec
    fichier generer le 12/12/2008 a 01h 00min 00sec
    fichier generer le 01/01/2009 a 10h 00min 25sec
    fichier generer le 02/06/2009 a 20h 35min 00sec

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Tequilapaf,


    Cette file est taguée “Résolu“ mais aucune des solutions avancées ne me plaît.

    Celle de N.tox parce qu’il faut une conversion préalable en tuple d’entiers, la tienne parce qu’elle est anti-optimisée, celle de pacificator parce qu’elle est trop compliquée.



    Si tes listes de date-paquet sont grandes, ton code va être long à tourner.
    En effet pour trouver annee,mois et jour tu le fais spliter 3 fois de la même manière avec “/“ + un split avec “ “.
    Puis pour trouver heure,minute,seconde et le paquet tu lui fait spliter 4 fois de la même manière avec “ “ + 3 fois avec “:“.
    Autrement dit , ton code passe son temps à répéter des actions identiques.

    Si tu as vraiment besoin de récuperer annee,mois etc dans des variables, il y a vraiment plus simple et plus rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    li = ['2009/01/23 10:00:25 relevé du Mont Aigoual',
          '2008/12/12 01:00:00 amplitude radada',
          '2008/12/12 00:50:00 jhgkjhdkdd',
          '2009/06/02 20:35:00 station balnéaire du Touquet',
          '2009/06/01 19:13:28 phare XY7654' ]
     
    for el in li:
        annee = el[0:4]
        mois = el[5:7]
        jour = el[8:10]
        heure = el[11:13]
        minute = el[14:16]
        seconde = el[17:19]
        paquet = el[20:]
    Les extractions de segment de chaîne au moyen des indices est extrêmement rapide.



    Quant à ordonner la liste, Python ordonne aussi les chaînes d’après leurs caractères:
    le format de tes dates est idéal pour mettre à profit cette possibilité et faire un code très court.
    Utiliser sort() plutôt que sorted() évite de créer un liste supplémentaire: avec sort() la liste est triée sur place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    li = ['2009/01/23 10:00:25 relevé du Mont Aigoual',
          '2008/12/12 01:00:00 amplitude radada',
          '2008/12/12 00:50:00 jhgkjhdkdd',
          '2009/06/02 20:35:00 station balnéaire du Touquet',
          '2009/06/01 19:13:28 phare XY7654' ]
     
    li.sort(key=lambda x: x[0:19])
    print li
    2008/12/12 00:50:00 jhgkjhdkdd
    2008/12/12 01:00:00 amplitude radada
    2009/01/23 10:00:25 relevé du Mont Aigoual
    2009/06/01 19:13:28 phare XY7654
    2009/06/02 20:35:00 station balnéaire du Touquet

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

Discussions similaires

  1. transformer une liste chronologique
    Par lenovomax dans le forum Général Python
    Réponses: 3
    Dernier message: 06/05/2013, 15h12
  2. Rangement d'une liste
    Par m@tix dans le forum Ada
    Réponses: 3
    Dernier message: 05/06/2009, 12h27
  3. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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