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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
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
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
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
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 ]
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 ]
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 ]
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
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.
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.
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.
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.
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.