Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liste ordonn

7 réponses
Avatar
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.

7 réponses

Avatar
r
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.

Avatar
Salvatore
Bonjour Rémi,

Regarde ici :

http://www.daniweb.com/code/snippet451.html

Cordialement
Avatar
Méta-MCI (MVP)
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
Avatar
Pierre Quentel
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
Avatar
Méta-MCI \(MVP\)
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
Avatar
MC
Re !

Correctif :
ignorer les écarts INFERIEURS à la granulité


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








--
@-salutations

Michel Claveau

Avatar
r
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.