Algorithme en Python pour lister les dossiers et fichiers par date

Le 21 septembre 2022
algorithme

Exemple simple sans date uniquement en liste:

python
1
2
3
4
5
6
7
import os

def get_files_sorted_by_date(path):
    files = [(os.path.join(path, f), os.stat(os.path.join(path, f)).st_mtime)
             for f in os.listdir(path)]
    files.sort(key=lambda x: x[1])
    return [f[0] for f in files if os.path.isfile(f[0])], [f[0] for f in files if os.path.isdir(f[0])]

Dans cet algorithme, nous utilisons le module os pour accéder aux fichiers et dossiers présents dans le chemin spécifié. Nous utilisons la fonction listdir() pour obtenir une liste des noms de fichiers et de dossiers présents dans le chemin spécifié. Ensuite, nous utilisons la fonction stat() pour récupérer la date de modification de chaque fichier et dossier, et stockons ces informations dans une liste de tuples contenant le nom de chaque fichier et dossier ainsi que sa date de modification.

Nous utilisons ensuite la fonction sort() de la liste pour trier la liste de tuples par ordre croissant de date de modification en utilisant une fonction lambda. Enfin, nous séparons la liste triée en deux listes, l’une contenant les noms de fichiers et l’autre contenant les noms de dossiers.

Vous pouvez appeler cette fonction en spécifiant le chemin pour lequel vous souhaitez trier les fichiers et dossiers, comme suit :

python
1
2
3
files, dirs = get_files_sorted_by_date('/chemin/vers/le/dossier')
print('Fichiers triés par date :', files)
print('Dossiers triés par date :', dirs)

Résultat une liste des noms de fichiers et de dossiers triés par date de modification pour un chemin spécifique.


Un exemple qui liste les dossiers et fichiers par date de modification et renvoie les résultats sous forme de JSON :

python
1
2
3
4
5
6
7
8
9
10
11
12
import os
import json
from datetime import datetime

def get_files_sorted_by_date_json(path):
    files = [(os.path.join(path, f), os.stat(os.path.join(path, f)).st_mtime)
             for f in os.listdir(path)]
    files.sort(key=lambda x: x[1])
    files_dict = {'date_check': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                  'files': [f[0] for f in files if os.path.isfile(f[0])],
                  'dirs': [f[0] for f in files if os.path.isdir(f[0])]}
    return json.dumps(files_dict, indent=4)

Dans cet algorithme, nous utilisons les mêmes méthodes pour obtenir la liste triée de fichiers et de dossiers que dans l’exemple précédent. Ensuite, nous créons un dictionnaire files_dict avec trois clés : “date”, “files” et “dirs”. La clé “date” contient la date et l’heure actuelles sous forme de chaîne de caractères. Les clés “files” et “dirs” contiennent les noms triés des fichiers et des dossiers respectivement.

Nous utilisons ensuite la fonction json.dumps() pour convertir le dictionnaire en une chaîne JSON formatée avec une indentation de 4 espaces.

Vous pouvez appeler cette fonction en spécifiant le chemin pour lequel vous souhaitez trier les fichiers et dossiers, comme suit :

python
1
2
result_json = get_files_sorted_by_date_json('/chemin/vers/le/dossier')
print(result_json)

Résultat une chaîne JSON formatée contenant la date actuelle du check et les noms triés des fichiers et des dossiers.


Exemple d’algo si vous souhaitez avoir la date de modification pour chaque dossier et fichier dans le chemin spécifié, trié par date :

python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
import json
from datetime import datetime

def get_files_sorted_by_date_json(path):
    files = [(os.path.join(path, f), os.stat(os.path.join(path, f)).st_mtime)
             for f in os.listdir(path)]
    files.sort(key=lambda x: x[1])
    files_dict = {'date_check': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                  'files': [],
                  'dirs': []}
    for file in files:
        if os.path.isfile(file[0]):
            files_dict['files'].append({'name': file[0], 'date': datetime.fromtimestamp(file[1]).strftime('%Y-%m-%d %H:%M:%S')})
        elif os.path.isdir(file[0]):
            files_dict['dirs'].append({'name': file[0], 'date': datetime.fromtimestamp(file[1]).strftime('%Y-%m-%d %H:%M:%S')})
    return json.dumps(files_dict, indent=4)

Dans cet algorithme, nous utilisons les mêmes méthodes pour obtenir la liste triée de fichiers et de dossiers que dans les exemples précédents. Ensuite, nous créons un dictionnaire files_dict avec trois clés : “date”, “files” et “dirs”. La clé “date” contient la date et l’heure actuelles sous forme de chaîne de caractères. Les clés “files” et “dirs” contiennent chacune une liste de dictionnaires, chaque dictionnaire contenant les informations sur un fichier ou un dossier.

Dans la boucle for, nous parcourons chaque élément de la liste triée et vérifions s’il s’agit d’un fichier ou d’un dossier. Si c’est un fichier, nous ajoutons un dictionnaire contenant le nom et la date de modification du fichier à la liste files_dict['files']. Si c’est un dossier, nous ajoutons un dictionnaire contenant le nom et la date de modification du dossier à la liste files_dict['dirs'].

Nous utilisons ensuite la fonction json.dumps() pour convertir le dictionnaire en une chaîne JSON formatée avec une indentation de 4 espaces.

Vous pouvez appeler cette fonction en spécifiant le chemin pour lequel vous souhaitez trier les fichiers et dossiers, comme suit :

python
1
2
result_json = get_files_sorted_by_date_json('/chemin/vers/le/dossier')
print(result_json)

Résultat une chaîne JSON formatée contenant la date de modification pour chaque fichier et dossier trié par date.