|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
|
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
Re !
Correctif : > ignorer les écarts INFERIEURS à la granulité Désolé pour la gêne... -- @-salutations Michel Claveau |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
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. |
|
![]() |
| Outils de la discussion | |
|
|