Récupérer les notes sur le disque
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

Simon
16 mai 2024
Résolue
2 réponses
Pourquoi utiliser os et non pathlib?
Bonjour, dans cette série de vidéos, le module pathlib est utilisé pour récupérer Path.home(), mais c'est tout: tout le reste est fait avec le module os. Pourquoi ne pas utiliser Pathlib pour l'ensemble des opérations sur les fichiers et dossiers? Merci d'avance!
00:00:00 :Dans cette partie, on va voir comment récupérer les notes qui sont à l'intérieur du dossier.Pour l'instant, il n'y a aucune note, donc la première chose qu'on va faire, c'esttout simplement, à l'intérieur de notre script ici, créer plusieurs notes que l'onva pouvoir ensuite récupérer. Pour ça, je vais créer une petite boucle
00:00:16 :for, donc je vais dire pour i in range 5, ce qui va nous permettre de créer5 notes, et à l'intérieur de cette boucle, je vais mettre mon instance ici.
00:00:24 :Je vais modifier légèrement le contenu, donc ici je vais mettre par exemple contenu,je vais mettre décroché ici, on va transformer ça en fString pour intégrerici la variable i à l'intérieur de notre chaîne de caractère. On va faire
00:00:36 :pareil pour le titre, ici on va mettre titre, et on va insérer la variablei de la même façon en faisant un fString et en mettant des accolades avecla lettre i ici. Donc comme ça, on va avoir 5 notes qui vont avoir le titre
00:00:48 :0, 1, 2, 3 et 4, et pareil pour le contenu. On va ensuite sauvegarderces notes en faisant n.save. Donc là, vous voyez vraiment le côté API
00:00:56 :de l'application, c'est-à-dire qu'on n'a encore aucune interface graphique, mais on peut déjà créeret sauvegarder des notes sur le disque dur grâce à l'API qu'on est en train de construire.
00:01:04 :Donc je vais lancer le script en faisant un clic droit et en sélectionnantrun file in python console. Donc ça a bien fonctionné, on n'a pas eu de problème,
00:01:12 :et si on retourne ici dans notre dossier, on voit bien qu'on a 5 notes qui ontété créées. Si j'en ouvre une au hasard, par exemple celle-ci, pour vérifier
00:01:20 :le contenu de la note, on voit bien qu'on a ici titre 1 et contenu 1.Donc je ferme ici le textedit, et on va voir comment cette fois-ci récupérertous ces fichiers à l'intérieur de notre script ici. Donc pour récupérer ces notes,
00:01:32 :on va faire une fonction qu'on va mettre tout au début de notre script ici.La fonction, on va l'appeler tout simplement get notes, et à l'intérieur de cette fonction,on va boucler à travers tous les fichiers JSON qui sont contenus dans le dossiernotes dire ici. Donc ce qu'on va faire, c'est utiliser un autre module
00:01:48 :qui est compris dans la librairie standard de Python également, qui s'appelle globe, et dans ce moduleon va avoir une fonction qui s'appelle globe également. Donc c'est le même nom pour la fonction
00:01:56 :et pour le module. Donc nous on va utiliser directement la fonction qui est contenueà l'intérieur du module, donc on la porte comme ceci en faisant from globe importglobe. On va ensuite récupérer tous les fichiers JSON qui sont contenus
00:02:08 :à l'intérieur du dossier notes. Pour ça, on va récupérer dans une variable fichiertous les fichiers qui sont contenus à l'intérieur du dossier grâce à la fonctionglobe, et on va concatener avec os.path.join
00:02:20 :le notes dire, donc notre dossier qui contient les notes, avecla chaîne de caractère asterisk.json. Donc cette asterisk icinous permet de spécifier qu'on veut récupérer tous les fichiers, peu importe leur nom,et qu'on veut uniquement cibler les fichiers qui se terminent avec l'extension .json.
00:02:36 :Donc tout ça ici, os.path.join, ça nous permet de générerles chemins de fichiers que l'on veut chercher, et globe va nous permettre de récupérer tous ces fichiers.
00:02:44 :Donc pour l'instant, si je fais juste un print de fichiers, et queje lance cette fonction, donc je reviens ici à la fin, j'enlève ma boucle, et je vaistout simplement appeler ma fonction getNotes, je lance le script, et on devraitrecevoir une liste, quand on lance le script, voilà, ici, qui contient
00:03:00 :les chemins vers toutes les notes au format .json. Donc on a récupéré les notes,pour l'instant on a juste les chemins, et à partir de ces chemins de fichiers, on va les ouvriret créer des instances de notre classe ici notes, que l'on va ajouterdans une liste, que l'on va ensuite retourner à la fin de notre fonction.
00:03:16 :Donc la première chose qu'on va faire, c'est boucler sur tous ces fichiers. Donc je vais dire pour fichierin fichier, donc là attention, j'ai bien la première variable ici qui estau singulier, et cette deuxième variable ici qui est au pluriel, donc qui correspond à cettevariable fichier, qui contient la liste de tous les chemins de fichiers de mes notes.
00:03:32 :Donc on va boucler sur tous ces fichiers, et la première chose qu'on va faire, c'estouvrir le fichier. Donc on va utiliser withOpen, on va donner le
00:03:40 :chemin vers le fichier, donc qui est contenu dans cette variable fichier, et on va ouvrir cefichier, donc je passe la chaîne de caractère R ici, pour signifier que je veux ouvrir le fichieren mode lecture. R qui signifie read, signifiant lecture
00:03:52 :en anglais. Je vais l'ouvrir dans une variable que je vais appeler f, comme d'habitude,et on va récupérer grâce au module JSON le dataqui est contenu à l'intérieur de ce fichier JSON. Donc je vais récupérer ça dans une variable
00:04:04 :que je vais appeler noteData, et on va utiliser la fonction load, et on valoader notre fichier ici. Donc là ça va nous permettre de récupérer le dictionnaire qui est
00:04:12 :contenu à l'intérieur de notre fichier. Donc on va avoir le dictionnaireavec le titre et le contenu de la note. On va récupérer ensuitel'identifiant unique qui est contenu dans le chemin du fichier, donc c'est cet identifiantici. Donc pour ça on va devoir faire quelques opérations sur le chemin
00:04:28 :du fichier pour récupérer uniquement cette partie du chemin. Donc pour ça il vadéjà falloir récupérer ici uniquement le nom du fichier.Donc on ne va pas être intéressé par le nom du dossier parent, on va vouloir récupérer uniquementcette partie du chemin du fichier. Pour ça on va utiliser la fonction
00:04:44 :os.pat.basename, et on va lui passer le chemin dufichier qui est contenu donc dans ma variable fichier. Donc ça, ça va me retourner icitoute cette information. Le problème c'est que pour l'instant on va encore avoir
00:04:56 :l'extension ici .json, et nous on veut récupérer uniquement l'identifiant unique.Pour ça on va utiliser une autre fonction qui est os.pat.splithextqui va nous permettre de séparer le nom du fichierde son extension. Donc qu'est-ce qu'on va lui passer à cette fonction splithext ?
00:05:12 :Tout ce qu'on a récupéré ici, c'est-à-dire le chemin du fichier avec l'extension. Donc je coupetout ça et je le mets à l'intérieur des parenthèses. Donc tout ça, ça va nous récupérer
00:05:20 :un topol qui va contenir en premier élément le nom du fichiersans l'extension, et en deuxième élément l'extension du fichier. Donc nous ce qu'on va vouloir
00:05:28 :récupérer c'est le premier élément du topol, à savoir uniquement l'identifiant unique.Donc pour récupérer le premier élément du topol, on met des crochets et on va spécifierl'index 0, puisqu'on commence à compter à 0 en python. Donc le premier
00:05:40 :élément du topol, ça va être l'élément avec l'indice 0. On varécupérer tout ça dans une variable qu'on va appeler note-uuidet on va mettre un égal pour faire l'assignation de cette variable.
00:05:52 :Je continue et on va cette fois-ci récupérer le titre et le contenu de notrenote. Donc le titre et le contenu, on les a déjà plus ou moins récupérés à l'intérieur
00:06:00 :de ce dictionnaire noteData, sauf que pour l'instant c'est un dictionnaire et nous on aimeraitrécupérer directement dans deux variables à la fois le titre et le contenu.
00:06:08 :Donc ce qu'on peut faire, on peut le faire directement sur une seule ligne si on veut ou deux lignes,ça à vous de voir ce que vous préférez. Moi je vais le faire sur deux lignes, donc on va faire noteTitle
00:06:16 :et on va dire que c'est égal à noteData et on va utiliser la méthode get qui nouspermet de récupérer la valeur associée à une clé dans un dictionnaire. Donc j'utilise la méthode
00:06:24 :get au cas où la clé n'existe pas. Là on peut être à peu près sûr quela clé va exister, mais si jamais quelqu'un décide de modifier la note et de corrompreles données, et bien on pourrait se retrouver avec des erreurs. Donc l'avantage de la méthode get
00:06:36 :c'est que si la clé n'existe pas, on aura tout simplement none à la place d'avoir uneerreur. Donc je vais récupérer la valeur qui est associée à la clé title
00:06:44 :et je vais copier cette ligne, la coller ici et faire la même chose avec le contenucette fois, donc que je vais stocker dans une variable que je vais appeler noteContent.
00:06:52 :On va récupérer ici le contenu, donc avec la chaîne de caractère contentqui correspond à la clé content dans notre dictionnaire.Donc là on a pas mal toutes les informations dont on a besoin pour continuer à écrireune instance de notre note. Alors là je remarque que j'ai juste rajouté
00:07:08 :un u en trop, donc il y a juste deux u ici, uuid. Et donc pour créerune instance de notre note, on va faire note égale et on va créer tout simplement une instancede notre classe. Le uuid on va le passer directement, donc on va dire
00:07:20 :uuid égale note uuid. On va passer le titrequi est contenu dans la variable noteTitle et on va passer le contenu qui estcontenu dans la variable noteContent. Donc là on a créé une instance de notre
00:07:32 :note et on va pouvoir l'ajouter dans une liste. Donc pour l'instant la liste on ne l'a pas encore crééeon va la créer ici tout en haut au début de notre fonction, on va créerune liste vide pour commencer et à l'intérieur de cette liste on va ajouterl'instance qu'on a ici créée à la ligne précédente. Donc j'ajoute cette
00:07:48 :instance dans ma liste avec la méthode append. Et pour finir une foisqu'on sera passé à travers tous les fichiers, on va tout simplement retourner cette listedonc on fait un return de la liste note. Alors là il y a juste un petit truc
00:08:00 :qu'il va falloir qu'on adresse tout de suite, c'est que pour l'instant on passe l'identifiant uniqueici à notre instance, mais si on va voir à l'intérieur de notre instance, ici on n'utilise pasce paramètre pour l'instant, tout ce qu'on se contente de faire c'est de générer un identifiantunique quand on crée une note. Donc ça c'est bien quand on veut créer une note
00:08:16 :qui n'existe pas, mais quand la note existe déjà sur le disque et bien on veut lui donnerl'identifiant qui correspond au nom du fichier ici qu'on a récupéré dans notre fonction.
00:08:24 :Donc il va falloir modifier légèrement cette méthode init pour pouvoirdans certains cas lui passer un identifiant unique et non pas le généreravec cette fonction uuid 4. Donc pour ça on va tout simplement faire une petite
00:08:36 :vérification avec une structure conditionnelle directement dans la méthode initici. Donc on va vérifier si uuid contient quelque chose.Donc on va faire cette vérification tout simplement en faisant if uuid.
00:08:48 :Donc si uuid est égale à none, et bien cette structure conditionnelle ne sera pasvérifiée. Donc là si on envoie quelque chose, et c'est le cas ici quand on crée une
00:08:56 :instance de notre note puisqu'on lui passe l'identifiant que l'on a récupérédepuis le nom du fichier. Donc si on passe quelque chose lors de la création de
00:09:04 :l'instance, et bien on va tout simplement le récupérer dans l'attribut uuiddonc on va dire self.uuid égale uuid. Donc c'estassez dur à dire, désolé ça fait beaucoup de choses, j'aurais peut-être dû choisir unautre nom pour cette variable puisque c'est un peu difficile à dire. Alors faites
00:09:20 :attention d'ailleurs de ne pas utiliser id puisque id c'est un mot qui estréservé en python. Vous voyez si je change ici pour id, on va avoir une coloration syntaxique
00:09:28 :différente puisque id c'est une fonction python. Donc c'est en partie pour ça que je gardeles deux u devant, même si c'est un petit peu dur à dire, je pourrais peut-être juste mettre uidça serait plus facile à prononcer. Donc self.uuid est égale à
00:09:40 :uuid qui est identifiant unique que l'on a récupéré ici quand on crée l'instancede notre note. Si ce n'est pas le cas, si on ne passe rien, comme dans le cas où
00:09:48 :on crée une note qui n'existe pas encore, eh bien on va générer un identifiant uniquedonc là je vais faire un else et dans le else je vais mettreici cette ligne de code qui me permet de générer un identifiant unique à partirde cette fonction. Donc voilà pour la récupération de la note, on va pouvoir
00:10:04 :maintenant tester notre fonction. Alors je vais récupérer la liste de notesici en faisant note égale get notes et on va faire un print de notes.
00:10:12 :Alors je vais relancer l'exécution de mon script en cliquant sur la petite flècheici et on va voir ce que ça me donne et là on a bien titre 0 avec l'identifiantde ma note, titre 4, titre 1, titre 3et titre 2. Donc on a bien toutes les notes ici qui sont récupérées
00:10:28 :grâce à ma fonction et ici on remarque que ce sont donc des instancesde ma classe qui sont directement intégrées dans ma liste. Je peux aller voir dans
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.