- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va créer le cœur de notre application.On va remplacer ce print ici par du code Python pour chercher et supprimer éventuellement les fichiers avec l'extension donnée.
00:00:10 :Pour nos tests, on va utiliser dans le dossier data ici tous les fichiers qui sont ici,donc des fichiers qui sont factices avec des extensions différentes,donc des extensions de fichiers texte, de fichiers audio, mp3, etc.
00:00:21 :C'est à l'intérieur de ce dossier qu'on va pouvoir tester notre script.Nous, ce qu'on va faire déjà, c'est vérifier si on passe quelque chose dans le directory.
00:00:29 :On va dire que si on ne passe rien, on va récupérer le dossier courant.Pour ça, on va utiliser patlib.On va l'importer au début de notre script.
00:00:36 :On va dire from patlib import pat, qui est la classe qui va me permettre d'utiliser patlib,donc de créer un chemin de type patlib.Je vais ici vérifier déjà si on a un dossier qui est présent ou pas.
00:00:48 :Si ce n'est pas le cas, if not directory,si on n'a pas de dossier qui est donné, ça veut dire que le paramètre ici est à non.
00:00:54 :If not directory, on va dire que directory est égal à pat.cwd.Cwd, c'est current working directory, donc le dossier courant dans lequel on se trouve.
00:01:04 :Par exemple, si je lance mon script ici, en faisant python 3.8 main.py,ce directory ici va être égal au dossier courant,dans ce cas-ci le dossier finder qui est dans mon dossier utilisateur.
00:01:16 :Le tilde ici, c'est le dossier utilisateur.Je vais juste faire un print pour vous montrer que c'est bien ça.Je vais faire un print de directory ici.
00:01:23 :Je lance mon script comme ceci, en ne passant rien.Donc là on a oublié de mettre l'extension, bien sûr il faut quand même mettre une extension.
00:01:29 :Donc je mets l'extension et là on voit bien qu'on a le dossier user tbash finderqui est le dossier dans lequel je me trouve.Si par contre je navigue à l'intérieur de data et que je relance mon script,donc là il va falloir remonter d'un niveau puisque je ne suis plus dans le même dossier.
00:01:43 :Donc je fais . . slash ici, je remets l'extensionet là on voit que cette fois-ci le dossier c'est bien le dossier data dans lequel je me trouve.
00:01:50 :Donc moi je vais remonter d'un niveau ici.Dans ma fonction ici j'enlève le print et ce que je vais faire également c'est un elsepuisque si on a un dossier qui est passé on va le convertir en objet pathlibpuisqu'on va utiliser pathlib par la suite pour chercher les fichiers avec une extension.
00:02:04 :Donc l'extension qu'on va passer ici.Donc pour ça je vais devoir créer un objet pathlib puisque si on passe un chemin comme ceci,si on fait python 3.8 main.py et que là on passe un chemin, donc par exemple user tbash,
00:02:15 :et bien là ce sera une chaîne de caractères.Ici directory on a mis que c'était une chaîne de caractères.Donc ce que je vais faire c'est convertir mon chemin directory en chemin pathliben faisant path de directory.
00:02:25 :Là on pourrait même inverser si on souhaite avoir une condition un peu plus facile à lire,on pourrait inverser ces deux éléments.Donc dire que si on a un dossier qui est passé on le convertit en objet path,donc avec la classe path, et que si ce n'est pas le cas, donc là on va enlever le not,
00:02:39 :et que si ce n'est pas le cas, donc dans le else, et bien là on récupère le dossier courant.Donc si on a un dossier on le convertit en path, si ce n'est pas le cas on prend le dossier courant.
00:02:46 :Ensuite ce qu'on va faire c'est vérifier si le dossier existe ou non.S'il n'existe pas on ne pourra pas chercher à l'intérieur,et donc on va afficher un message d'erreur et sortir de notre script.
00:02:55 :Donc on va dire if not directory.exists,donc ça c'est une méthode qui est disponible sur les objets de type path,qui va me permettre de savoir si le dossier existe ou non.
00:03:05 :Donc si le dossier n'existe pas, if not directory.exists,et bien on va afficher un message d'erreur.Donc on va utiliser s echo pour afficher un message avec une stylisation spécifique,donc on va le mettre en rouge en fait pour que ce soit assez visible.
00:03:19 :Donc on va faire un fstring et on va dire le dossier,et on va insérer le nom du dossier, donc on va mettre directory ici.
00:03:25 :Donc le dossier n'existe pas.Et là on va spécifier fg égale typer.colors.red.Donc comme ça on va mettre le texte ici en rouge,et ça va être assez explicite qu'on a en présence d'une erreur.
00:03:38 :Et ce qu'on va faire ensuite c'est lever typer.exit pour sortir de notre script.Donc si je sauvegarde et que je relance mon script,et cette fois-ci on va donner un dossier qui n'existe pas,donc on va dire par exemple Patrick, et je vais remettre l'extension txt,je lance mon script, et là on a bien le dossier user Patrick n'existe pas.
00:03:55 :Je vais juste rajouter des guillemets simples ici,pour qu'on voit bien qu'il s'agit du chemin qu'on a passé,donc comme ça ce sera un peu plus clair si je relance,là on voit qu'on a bien le dossier user Patrick avec les guillemets autour.
00:04:06 :Donc ça c'est juste dans le cas où l'utilisateur passe un dossier qui n'est pas valide.Donc ça, ça nous permet de ne pas continuer,puisqu'on ne peut pas chercher à l'intérieur d'un dossier qui n'existe pas.
00:04:16 :Ensuite ce qu'on va faire c'est récupérer tous les fichiers qui sont à l'intérieur du dossier.Donc si on ne passe pas dans cette structure conditionnelle,ça veut dire que le dossier existe.
00:04:23 :Donc on va récupérer grâce à Patlib tous les fichiers avec une extension spécifique,donc l'extension qu'on va passer, qu'on va récupérer dans txt.Donc on va faire directory.rglob,
00:04:33 :donc rglob ça permet de le faire de façon récursive,puisqu'on va vouloir chercher dans les dossiers et les sous-dossiers à partir du dossier source.Et ce qu'on va faire c'est mettre un fstring avec l'astérisque, point, et l'extension.
00:04:45 :Donc l'extension c'est ce qu'on avait ici, l'extension,on va le mettre à l'intérieur des accolades, donc le paramètre extension.Donc on va chercher tous les fichiers qui correspondent à n'importe quoi en nom de fichier, point, l'extension.
00:04:56 :Donc par exemple si on donne .txt et qu'on va chercher dans le dossier data ici,on va récupérer tous les fichiers qui commencent par quelque chose et qui se finissent par .txt.
00:05:05 :Donc on va faire un test de tout ça, on va faire un print de chaque fichier,donc on va dire pour file in files, et on va faire un typer .echo de file.
00:05:14 :Donc je sauvegarde, je relance, là on ne va pas passer Patrick,on va juste laisser comme ça par défaut, donc on ne donne pas de dossier,et par défaut il va donc utiliser le dossier courant,et on va chercher tous les fichiers txt à l'intérieur du dossier courant.
00:05:26 :Donc à partir de finder, donc là à partir de finder dans finder il n'y a rien,on a juste des fichiers Python, et à l'intérieur de data on a trois fichiers texte,donc enav.txt, goal.txt et fly.txt.
00:05:37 :Si je cherche les fichiers Python, cette fois-ci à partir du dossier courant,là on va retrouver les trois fichiers que j'ai, donc main01, 02, 03,et le fichier main.py ainsi qu'un fichier generate.py à l'intérieur du dossier data.
00:05:49 :Donc ça fonctionne correctement, et maintenant on va rajouter un petit peu de choses icipour que ce soit un peu plus agréable, et également rajouter la possibilitéde supprimer les fichiers.
00:05:58 :Donc ce que je vais faire c'est déjà vérifier si on a passé l'option delete,donc on va faire un if delete, donc si on a passé l'option delete,on va boucler à travers les fichiers, et on va les supprimer.
00:06:07 :Et si ce n'est pas le cas, et bien on va tout simplement les afficher.Donc pour l'instant je vais laisser de côté le delete,et je vais faire le cas de figure où on ne souhaite pas supprimer les fichiers,mais juste les afficher.
00:06:16 :Donc là je vais refaire un typer.secho à la place de juste un echo,puisqu'on va styliser en fait ce qu'on avait.Et ce que je vais faire c'est enlever la boucle pour l'instant,je vais juste afficher un texte par défaut, on va direfichiers trouvés avec l'extension.
00:06:31 :Donc c'est juste une phrase qui va permettre d'indiquer qu'on a des fichiersqui ont bien été trouvés, donc fichiers trouvés avec l'extension,et là on va remettre l'extension, donc on va remettre les accolades,on met l'extension qu'on a passée, et on va ensuite styliser cette phraseen mettant une couleur de background, donc on va dire typer.colors.blue,
00:06:49 :donc bleu pour le background, et pour le foreground,on va mettre typer.colors.brightwhite,pour que ce soit un peu plus visible.Donc là normalement on a tout ce qu'il faut,et ensuite on va tout simplement reboucler à travers nos fichiers,donc pour file in files, et on va faire un typer.echo de files.
00:07:05 :Donc si je sauvegarde et que je relance le script que j'avaisavec l'extension py, on voit qu'on a bien donc fichiers trouvésavec l'extension py, là on a, alors j'ai fait un affichage de fileset non pas de files, donc je me suis trompé, je relance,et là on a bien donc notre affichage ici,
00:07:20 :fichiers trouvés avec l'extension py,et ensuite les fichiers qui sont affichés.Je vais juste mettre un espace avec les deux points,et ensuite on va gérer l'option ici dans le cas de figureoù on passe delete.
00:07:30 :Donc si on dit "-delete", ici, avec l'extension py par exemple,donc je vais remettre txt pour m'assurer de ne pas potentiellementsupprimer les fichiers py, pour l'instant on n'a rien mis ici,donc ça ne va rien faire, mais je préfère quand même prévenir les risques.
00:07:43 :Donc j'appuie sur entrée, et là vous voyez que rien ne se passe,et c'est normal puisqu'on va passer dans cette structure conditionnelle,et pour l'instant on a juste mis un pass ici.
00:07:50 :Donc la première chose qu'on va faire, c'est demander la confirmation.On va faire un typer.confirm, et demander à l'utilisateurs'il souhaite vraiment supprimer tous les fichiers trouvés.
00:07:58 :Donc on met une chaîne de caractère ici, on va dire"-Voulez-vous vraiment supprimer tous les fichiers trouvés ?"Et on va également passer le paramètre abort à true,puisque si l'utilisateur dit qu'il ne souhaite pas supprimertous les fichiers trouvés, on souhaite arrêter, ne pas aller plus loin,donc on pourrait également récupérer tout ça dans une variable,
00:08:16 :par exemple une variable confirm, et ensuite faire une structure conditionnelle.Là dans notre cas, on sait que si l'utilisateur ne souhaite pas les supprimer,on ne va pas plus loin, et donc on va faire un abort qui est égal à true.
00:08:26 :Donc ça nous évite d'avoir à faire une structure conditionnelle ici.On va pouvoir tout simplement boucler à travers les fichiers,donc on va dire pour file in files, et donc là comme on a mis abort encore une fois,vraiment si l'utilisateur dit qu'il ne souhaite pas les supprimer,on ne va même pas continuer ici.
00:08:39 :Donc là c'est peut-être un peu perturbant puisqu'on ne voit pasde exit ou de abort ou de choses du genre,mais c'est vraiment ce paramètre qui va se charger de ne pas aller plus loin,donc on ne rentrera pas dans cette boucle.
00:08:49 :Donc là ce qu'on va faire, c'est qu'on va supprimer les fichiers,donc avec patlib on va faire file.unlink, ce n'est pas très explicite,mais pour les fichiers patlib, pour les supprimer, on utilise unlink,et ça va supprimer le fichier du disque dur.
00:09:00 :Et ensuite ce qu'on va faire, c'est juste afficher avec s echo une phrase en rougequi va dire qu'on a bien supprimé le fichier.Donc je refais un fstring, je dis suppression du fichier,et on va inclure le nom du fichier ici, donc en tracolade,on va mettre la variable file, et on va styliser ce texte en disant
00:09:17 :fg égale typer.colors.red.Donc on va afficher le texte en rouge, et c'est tout ce qu'on va faire,on va donc boucler à travers les fichiers, les supprimer, et afficher cette phrase.
00:09:26 :Donc je sauvegarde, je relance, on souhaite supprimer les fichiers txt,on va mettre le flag delete, donc pour spécifier qu'on souhaite les supprimer,donc j'appuie sur entrée, on me demande si je souhaite les supprimer,par défaut si je ne mets rien, il va utiliser l'option n, donc no,je peux mettre également n et ça fera la même chose,
00:09:42 :donc on va mettre n, on appuie sur entrée, et là vous voyez qu'on a bienle script qui a été annulé, donc aborted ici,donc ça c'est grâce vraiment à ce paramètre.
00:09:50 :On va essayer cette fois-ci en confirmant, donc on va dire yes,on met y, on appuie sur entrée, et là on a bien supprimé les fichiers,donc suppression du fichier na.xt, goal.xt, et fly.xt.
00:10:00 :Je vais retourner voir à l'intérieur de mon fichier data,et là si on regarde normalement, les fichiers txt ne sont plus présents.On va essayer de supprimer les fichiers wav, par exemple,donc ce fichier senior.wav, donc à la place de txt,
00:10:11 :je vais mettre ici wav, je valide avec entrée,et là si on revient, donc on va peut-être actualiser ce dossier,je reviens, et là, alors je n'ai pas encore, je n'ai pas à confirmer,donc il faut que je confirme auparavant,et voilà, là vous voyez que ça s'est bien rafraîchi,
00:10:25 :et on a bien supprimé tous les fichiers wav,dont le fichier senior.wav, which, nice, et finish.wav.Donc tous ces fichiers ont bien été supprimés,donc notre script fonctionne parfaitement.
00:10:35 :Si on souhaite juste les afficher, et bien ici on peut mettre,par exemple, mp3, on ne met pas le flag delete,par défaut il est à false, donc on n'a même pas besoin de mettre no delete,si on ne met rien par défaut il sera à false,donc je valide en appuyant sur entrée,
00:10:47 :et là on a bien tous les fichiers qui sont affichés avec notre texte,au départ, qui s'affiche ici.Donc ça fonctionne correctement, on a notre fonction qui marche,avec tous les comportements en fonction des paramètres qu'on passe,donc avec l'extension, le directory, le delete,et on a un programme entièrement fonctionnel.
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.