Liste ordonn

Le
r
Bonjour,

Comment faire pour avoir une liste des fichiers contenus dans un
répertoire ? Une liste ordonnée suivant la date de crétion par exemple.

Mes deux pistes qui ne donnent pas le résultat voulu :
*listdir() du module os renvoie une liste dans un ordre arbitraire.
*le code suivant aussi donne un ordre arbitraire :
import glob
for fichier in glob.glob(r'*.jpg'):
print fichier
Pourtant, j'ai bien crée des fichiers 1.jpg, 2.jpg
:-s
Une idée ?
Merci.
Rémi.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
r
Le #647128
Le Sat, 15 Sep 2007 14:32:31 +0000, rémi a écrit:

Bonjour,

Comment faire pour avoir une liste des fichiers contenus dans un
répertoire ? Une liste ordonnée suivant la date de crétion par exemple.

Mes deux pistes qui ne donnent pas le résultat voulu :
*listdir() du module os renvoie une liste dans un ordre arbitraire.
*le code suivant aussi donne un ordre arbitraire :
import glob
for fichier in glob.glob(r'*.jpg'):
print fichier
Pourtant, j'ai bien crée des fichiers 1.jpg, 2.jpg...
:-s
Une idée ?


Un liste.sort() semble fonctionner mais, il me semble, c'est parce que les
noms peuvent être classés alphabétiquement.

Salvatore
Méta-MCI (MVP)
Le #647123
Bonsoir !


Regarde la doc pour os.stat( )
Attention, sous windows, selon le formatage du disque, le nombre de datetime varie (1 pour FAT, 3 ou
plus pour NTFS) ; et FAT est souvent employé sur les clefs-USB


@+

Michel Claveau
Pierre Quentel
Le #647121
Bonjour,

Il faut commencer par récupérer la liste des noms de fichiers par
os.listdir, puis faire un sort() sur cette liste en donnant comme
argument de sort() une fonction qui compare deux valeurs

Pour un tri alphabétique, cette valeur est le nom du fichier (ou le
nom en minuscule si on veut que les A et les a apparaissent ensemble,
et pas les A après les z)

Pour un tri par date de création, la valeur est la date de création,
qu'on obtient par os.stat(nom_fichier).st_ctime (nom_fichier est le
nom complet, répertoire compris)

Voilà ce que ça donne :

==============
import os

def tri_alpha(rep):
# tri par ordre alphabetique
files = os.listdir(rep)
files.sort(lambda x,y:cmp(x.lower(),y.lower()))
return files

def compare_date_creation(f1,f2):
# fonction de comparaison de dates de création
d1 = os.stat(f1).st_ctime
d2 = os.stat(f2).st_ctime
return cmp(d1,d2)

def tri_date_creation(rep):
files = os.listdir(rep)
# nom complet y compris repertoire
files = [os.path.join(rep,f) for f in files]
files.sort(compare_date_creation)
# enlever le nom du repertoire
return [ os.path.basename(f) for f in files ]

print tri_alpha(os.getcwd())
print tri_date_creation(os.getcwd())
=========================

A+
Pierre
Méta-MCI \(MVP\)
Le #647119
Salut !

Petite précision : les datetime des fichiers sont soumises à une notion floue, la granulité. En
gros, cela signifie que le datetime utilisé est approximatif. Par exemple, sous windows avec FAT,
la granulité est de 2 secondes.

Cela peut être important, lorsque l'on veut savoir si un fichier est plus récent qu'un autre (le
sauvegarder ou non ?). En clair, il faut ignorer les écarts supérieur à la granulité.

Malheureusement, il est très difficile de savoir quelle est la granulité d'un OS, sur un disque
particulier.

@-salutations

Michel Claveau
MC
Le #646920
Re !

Correctif :
ignorer les écarts INFERIEURS à la granulité


Désolé pour la gêne...








--
@-salutations

Michel Claveau

r
Le #646915
Le Sun, 16 Sep 2007 00:30:23 -0700, Pierre Quentel a écrit:

Bonjour,

Il faut commencer par récupérer la liste des noms de fichiers par
os.listdir, puis faire un sort() sur cette liste en donnant comme
argument de sort() une fonction qui compare deux valeurs

Pour un tri alphabétique, cette valeur est le nom du fichier (ou le
nom en minuscule si on veut que les A et les a apparaissent ensemble,
et pas les A après les z)


Oui un sort() sur la liste arrive à très bien classé des fichiers dont le
noms contient des lettres et des chiffres. Par exemple les fichiers images
du type DSCM2045.jpg.


Pour un tri par date de création, la valeur est la date de création,
qu'on obtient par os.stat(nom_fichier).st_ctime (nom_fichier est le
nom complet, répertoire compris)

Voilà ce que ça donne :

[...]


Merci beaucoup pour cette intéressante contribution ! :-)
Très prédagogique en plus pour un éternel débutant comme moi.
Merci à Salvatore aussi pour son lien.
@+
Rémi.

Publicité
Poster une réponse
Anonyme