Récupérer les fichiers à l'intérieur du dossier
Exclusif Premium
Débloquez votre potentiel ! ✨
Cette session fait partie de notre programme Premium exclusif
+100h de formations exclusives
+180 exercices de code avancés
+100h de mentorats en réécriture
20 projets guidés pas à pas
Mentorats groupés hebdomadaires
Support individuel avec nos mentors
Prêt à passer au niveau supérieur ?
Découvrez tous les avantages Premium et transformez votre apprentissage dès aujourd'hui!
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compteToutes les questions

Alexis
12 mai 2024
Résolue
2 réponses
Créer l'instance Path avec le chemin de dossier
Bonjour,
je suis la correction et je ne comprends pas bien l'explication lorsque thibault créé l'instance Path au niveau du chemin de dossier. Qu'est-ce que cela implique et quelle est son utilité ?

Geoffroy Streit
24 mars 2024
Résolue
6 réponses
Quelles suggestions de corrections / améliorations pourriez vous me faire sur mon code ?
```:Python
# Python 3 script to sort files in dedicated folders according to their type (matching & moving files into subfolders specified in file_ext_dir dictionnary)
from pathlib import Path
import sys
print("Script to sort & organize automatically files according to extension / type in dedicated subfolders (move) :")
print("Audio / Pictures / Vidéos / Documents / Archives / Web / Code / Ebooks / Atari / Executables / Various (default)")
file_ext_dir = {
".mp3" : "Audio",
".wav" : "Audio",
".ogg" : "Audio",
".aac" : "Audio",
".flac" : "Audio",
".m4a" : "Audio",
".mid" : "Audio",
".mod" : "Audio",
".snd" : "Audio",
".wma" : "Audio",
".aax" : "Audio",
".jpg" : "Pictures",
".gif" : "Pictures",
".png" : "Pictures",
".jpeg" : "Pictures",
".webp" : "Pictures",
".svg" : "Pictures",
".psd" : "Pictures",
".eps" : "Pictures",
".xcf" : "Pictures",
".kra" : "Pictures",
".avi" : "Vidéos",
".mp4" : "Vidéos",
".mkv" : "Vidéos",
".mov" : "Vidéos",
".wmv" : "Vidéos",
".doc" : "Documents",
".doc" : "Documents",
".txt" : "Documents",
".pdf" : "Documents",
".rtf" : "Documents",
".json" : "Documents",
".xls" : "Documents",
".ppt" : "Documents",
".csv" : "Documents",
".xml" : "Documents",
".epub" : "Ebooks",
".fb2" : "Ebooks",
".djvu" : "Ebooks",
".mobi" : "Ebooks",
".cbr" : "Ebooks",
".cbz" : "Ebooks",
".zip" : "Archives",
".rar" : "Archives",
".cab" : "Archives",
".iso" : "Archives",
".bin" : "Archives",
".cab" : "Archives",
".img" : "Archives",
".tar" : "Archives",
".lha" : "Archives",
".arj" : "Archives",
".exe" : "Exec",
".bat" : "Exec",
".msi" : "Exec",
".htm" : "Web",
".html" : "Web",
".php" : "Web",
".css" : "Web",
".asp" : "Web",
".js" : "Web",
".py" : "Code",
".bas" : "Code",
".c" : "Code",
".cpp" : "Code",
".pi1" : "Atari",
".pc1" : "Atari",
".gfa" : "Atari",
".lst" : "Atari",
".prg" : "Atari",
".tos" : "Atari",
".ttp" : "Atari",
".asm" : "Atari",
".inl" : "Atari",
".st" : "Atari",
".msa" : "Atari",
".neo" : "Atari",
".gtk" : "Atari",
".acc" : "Atari",
".app" : "Atari"
}
print(file_ext_dir)
# choose the directory you want to sort by sub folders and move file of the matching extensions inside ('Downloads for ex., default, current working directory)
arguments = sys.argv
# print(arguments)
SORT_DIR = ""
if len(arguments)>1: # if some arguments were given to launch the script, it should be the path to organize
if Path(arguments[-1]).is_dir(): # Check if this directory exist
SORT_DIR = Path(arguments[-1]) # Set as dir to organize
print(f"Path {arguments[-1]} detected.")
while SORT_DIR == "": # if no valid arguments was given or no valid entry / path
print(f"Home directory : {Path.home()}")
print(f"Current working directory : {Path.cwd()}")
# then we ask user to enter path, choose home, cwd, or quit
user_choice = input("Enter the path of the directory you want to sort / organize files by file type in dedicated folders : \n OR 'h' for home directory \n OR 'c' for current working directory \n OR 'q' to quit \n : ")
if Path(user_choice).is_dir(): # Check if this directory exist
SORT_DIR = Path(user_choice) # Set as dir to organize
elif user_choice.lower() == 'q':
print("Ok. Bye !")
sys.exit()
elif user_choice.lower() == 'c':
SORT_DIR = Path.cwd()
elif user_choice.lower() == 'h':
SORT_DIR = Path.home()
else:
print("Not a valid entry / path. Try again. \n")
print(f"Directory to sort & organize : {SORT_DIR}")
if input("Ready ? (o (continue) /n (quit)) : ").lower() == 'n':
print("Ok. Bye !")
sys.exit()
print("Let's sort & organize !")
#SORT_DIR = Path(r'\Users\Public\Downloads')
files_to_sort = [f for f in SORT_DIR.iterdir() if f.is_file()] # gen file list for iteration on files only in sort_dir directory
for f in files_to_sort: # parse each file un folder
output_dir = SORT_DIR / file_ext_dir.get(f.suffix, "Various") # set path + name of the file type folder to create and move
output_dir.mkdir(exist_ok=True) # create destination folder (no error if previously created)
f.rename(output_dir / f.name) # move file to new matching folder ( rename at other folder = move )
print(f"{len(files_to_sort)} were sorted & moved in dedicated / matching subfolders.")
print("Done")
```
00:00:00 :Ensuite, qu'est-ce qu'on veut faire ? On veut récupérer les fichiers à l'intérieur du dossier.Donc là encore, il y a plein de façons de faire.
00:00:05 :Si jamais vous ne savez pas comment faire ce genre d'opération,et bien une façon très simple d'y remédier,c'est tout simplement d'ouvrir un navigateur internetet de poser la question à votre moteur de recherche favori.
00:00:14 :Donc on pourrait dire par exemple ici qu'on souhaite récupérer tous les fichiersà l'intérieur d'un dossier avec Python.Alors dans ce cas-ci, je vous avais indiqué qu'on pouvait utiliser la librairie Patslib.
00:00:23 :Donc vous avez déjà une petite indication, donc on pourrait dire en anglais.Bien sûr, vous pouvez essayer en français, mais vous aurez beaucoup moins de réponses.
00:00:29 :On peut donc essayer en anglais de direGet all files in directory with Patslib.Donc ce qui est assez explicite, on veut récupérer tous les fichiers dans un dossier avec Patslib.
00:00:39 :Donc je valide pour voir si j'ai quelque chose qui s'affiche.On a comme d'habitude Stack Overflow qui arrive en premier.Donc je vais cliquer ici pour voir les réponses que j'ai à cette question.
00:00:48 :Et là, vous voyez qu'on a déjà une première solution,qui est d'utiliser donc la classe Pats qui est contenue à l'intérieur de Patslib.Donc là, on voit ici le module Patslib et la fonction Glob qui me permet de récupérer tous les fichiers.
00:01:00 :Et ensuite, on voit qu'il utilise ici une compréhension de liste avec IsFile,qui permet de vérifier si un fichier est de type fichier ou dossier.
00:01:08 :Puisque quand on utilise Glob, en fait, on va récupérer à la fois les fichiers et les dossiers.Dans notre cas, on veut récupérer uniquement les fichiers.
00:01:15 :Donc vous voyez, il y a plein de façons de faire. On peut utiliser Glob.On peut utiliser aussi Eterdir.Et là, on retrouve la même façon de faire avec IsFile et IsDir.
00:01:22 :Avec là, dans ce cas-ci, une boucle un peu plus classique.Donc ce n'est pas une compréhension de liste, mais c'est assez similaire.Donc vous voyez, il ne faut vraiment pas hésiter, même si vous n'êtes pas très à l'aise avec l'anglais,d'aller chercher des réponses sur Internet.
00:01:33 :Là, vous voyez qu'on a déjà des bouts de code qu'on peut essayer.Au moins, même si on ne comprend pas forcément tout, on peut décortiquer tout ça.
00:01:38 :Moi, dans mon cas, je sais que je vais pouvoir utiliser Eterdir et IsFileavec une compréhension de liste pour récupérer tout ce dont j'ai besoin.
00:01:45 :Donc je vais revenir ici. Je vais importer le module Patslib.Donc on va le faire au début de notre fichier. On va dire From Patslib.
00:01:51 :Et on va importer cette classe Pats qui va me permettre de créer un objet de type Patslibet qui va me permettre d'utiliser ces différentes méthodes.
00:01:59 :Donc je vais créer une instance de cet objet ici en entourant ma chaîne de caractère.Comme ça, BaseDir ici, ce sera un objet de type Pats.
00:02:05 :Donc ensuite, ce que je vais faire, c'est utiliser la fameuse fonction Eterdir sur cet objet.Donc on va dire files égale à BaseDir point Eterdir.
00:02:14 :Donc si je fais juste ça, si je ne vais pas plus loin, je vais juste faire un print de fileset je vais exécuter mon script.
00:02:19 :Vous voyez qu'on a ce qu'on appelle un générateur.Donc un générateur, qu'est-ce que c'est ? C'est tout simplement une liste si vous voulez.Donc si on veut l'afficher sous forme de liste, on peut faire une liste avec la classe List ici.
00:02:29 :On convertit en fait notre générateur ici en liste avec cette classe List.Et ça va nous donner quelque chose d'un peu plus facile à lire.
00:02:35 :Donc là, on voit qu'on a des POSIXPATS qui est en fait ici une instance de cette classe Pats.Et ça correspond bien à tous les fichiers qui sont à l'intérieur du dossier Data.
00:02:44 :Donc je vais pouvoir boucler à travers tout ça et vérifier si c'est bien des fichierspuisqu'on ne veut pas récupérer les dossiers, on veut juste récupérer les fichiers.
00:02:50 :Donc pour ça, je vais pouvoir faire une compréhension de liste.Donc je vais englober tout ça avec des crochets.Et je vais dire que je veux récupérer f pour f in tout ça,si f.isFile avec un tiré du bas entre les deux.
00:03:04 :Et donc ça, c'est une fonction, donc je l'appelle.Donc ce qu'on fait ici, c'est tout simplement une boucle.Donc on fait une compréhension de liste avec les crochets.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.