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 :

faire un tri par date


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Points : 44
    Points
    44
    Par défaut faire un tri par date
    bonjour,

    dans un dossier doc,j'ai plusieurs fichiers plus ou moins ancien que j'aimerai trier en fonction de la date.voici le code que j'ai fait mais je ne sais pas comment faire le tri pour avoir en haut de la liste le fichier le plus ancien,et en bas de la liste le plus récent.

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import os
    import time
     
    for myfile in os.listdir('C:/Users/PC/Desktop/DOC'):
    	if myfile.endswith('.txt'):
     
    		chrono = time.ctime(os.path.getmtime('C:/Users/PC/Desktop/DOC/'+myfile))
    		print (myfile,chrono)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par frederic2710 Voir le message
    je ne sais pas comment faire le tri pour avoir en haut de la liste le fichier le plus ancien,et en bas de la liste le plus récent.
    Si vous voulez trier vos fichiers en fonction de leur date de création, il faut construire une liste de tuple composé par le nom du fichier et sa date de création. Ce qui va vous donner un truc de la forme [ ('A', 2), ('B', 1), ('C', 4) ].
    Ensuite trier L suivant le deuxième item de chaque tuple, c'est dans le tuto. sur le tri qui vient avec Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    bonjour,

    suite aux conseils de wiztricks je me suis référer a la page concernant le tri.j'ai essayé de l'appliquer,mais mais fichiers ne se trient pas en fonction de la date.
    voici le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import os
    import time
    import operator
    from operator import itemgetter
    z = []
     
    for myfile in os.listdir('C:/Users/PC/Desktop/DOC'):
    	if myfile.endswith('.txt'):
     
    		chrono = time.ctime(os.path.getmtime('C:/Users/PC/Desktop/DOC/'+myfile))
    		a = (myfile,chrono)		
    		z.append(a)		
    		z.sort( key= operator.itemgetter(1)

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 473
    Points : 9 270
    Points
    9 270
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avant de trier, il faut avoir terminé la boucle.

    Voilà une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
    from glob import iglob
     
    fichiers = []
    for fichier in iglob("C:/Users/PC/Desktop/DOC/*.txt"):
        if os.path.isfile(fichier):
            fichiers.append([fichier, os.path.getmtime(fichier)])
     
    fichiers.sort(key=lambda elem: elem[1], reverse=True) # tri par date avec date récente au début
    iglob est intéressant, parce qu'il accepte un motif 'wildcard' (ici "*.txt"), et qu'il donne directement le chemin complet vers le fichier.

    os.path.getmtime(fichier) donne un nombre flottant qui est le nombre de secondes depuis une référence (l'epoch: souvent le 1/1/1970). Pas de problème pour trier, mais si on veut afficher quelque chose qui parle, il faut convertir ça en date et heure lisbles. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from datetime import datetime
     
    for fichier, date in fichiers:
        print(fichier, str(datetime.fromtimestamp(date, tz=None)).split('.')[0])
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    bonjour,

    merci pour votre code, mais le tri ne s'effectue pas non plus.
    je continue a chercher.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par frederic2710 Voir le message
    l'appliquer,mais mais fichiers ne se trient pas en fonction de la date.
    Soyez un peu "vigilant"/"attentif"/"logique".

    Si vous voulez "trier", il faut que ce soit en fonction de machins qui satisfont une relation d'ordre.
    Si les machins sont des entiers, je suppose/j'espère que vous savez ce que çà signifie.

    Maintenant chrono = time.ctime(...), fabrique une chaîne de caractère qui ne respecte pas x < y <=> time.ctime(x) < time.ctime(y)... coté tri, utiliser çà sera plein de surprises...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Avec le code de @tyrtamos :

    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
    #! python3
    # coding: utf-8
     
    import os
    from termcolor import cprint
    from dateutil.tz import gettz
    from datetime import datetime
    from glob import iglob
     
    tzi = gettz("Europe/Brussels")
     
    # code @tyrtamos
     
    fichiers = []
    for fichier in iglob("Tests/forum_dvp/*.py"):
        if os.path.isfile(fichier):
            fichiers.append([fichier, os.path.getmtime(fichier)])
     
    # tri par date avec date récente au début
    fichiers.sort(key=lambda elem: elem[1], reverse=True)
     
    for fichier, date in fichiers:
        cprint("Fichier : {:40} , date : {:30}".format(fichier, str(
            datetime.fromtimestamp(date, tzi).isoformat())), "green")

    J'obtiens bien un tri par date :

    Nom : fichiers.png
Affichages : 2495
Taille : 93,0 Ko

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 67
    Points : 44
    Points
    44
    Par défaut
    bonjour ,

    je suis d'accord que dans la console le tri s'effectue bien bien, mais dans le dossier les fichiers sont toujours dans le désordre.
    est ce normal?

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 473
    Points : 9 270
    Points
    9 270
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par frederic2710 Voir le message
    mais dans le dossier les fichiers sont toujours dans le désordre.
    Je ne comprends pas bien le "...dans le dossier...".

    C'est le système d'exploitation qui décide de l'ordre physique des fichiers sur le disque, probablement dans l'ordre d'introduction, mais ce n'est même pas sûr. Et je ne vois pas comment on peut le modifier, à part peut-être de recopier les fichiers dans un autre répertoire?

    Mais s'il s'agit d'un simple affichage dans le navigateur de fichier, il est facile de trier les fichiers dans l'ordre qu'on veut, y compris dans l'ordre chronologique direct ou inverse. On peut même le faire avec une liste réduite à "*.txt". Et on n'a pas besoin de Python pour faire ça.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2010, 14h50
  2. faire un filtrage par date sur base de donnee "delphi
    Par medsoft dans le forum Bases de données
    Réponses: 7
    Dernier message: 04/02/2006, 17h03
  3. requete : tri par date + groupement
    Par cbe dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/01/2006, 19h30
  4. tri par date
    Par Digiduck dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/06/2005, 21h51
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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