Translate

samedi 27 janvier 2018

[ PYTHON ] - Lire et écrire dans les fichiers textes


Cet article est tiré de mon livre : "Python Utile".




Dans ce chapitre nous allons manipuler les fichiers et voir comment les ouvrir pour les lire et y écrire en mode texte. Commençons par voir comment les ouvrir et les fermer.


6.2 Ouvrir et fermer un fichier

Pour ouvrir et fermer un fichier il y a deux solutions possibles :





Voici comment ouvrir un fichier. En utilisant la fonction open et en lui donnant en argument : le nom du fichier, puis en deuxième argument, le mode d’ouverture (ligne 17).

Avec cette solution vous DEVEZ refermer le fichier à la fin de son utilisation. Pour cela vous utiliserez la méthode close comme montré ligne 19.

Voici la deuxième solution pour ouvrir un fichier :





En utilisant le context manager ‘with’. Pour cela il vous suffit de mettre le mot-clé ‘with’ suivi de la fonction ‘open’ (comme plus haut ) et de la faire suivre du mot-clé ‘as’ et du nom que vous donnez à la variable qui contiendra votre fichier. Deux points et vous effectuerez toutes les opérations sur le fichier dans ce bloc d’instruction. Le fichier se fermera seul quand vous quitterez ce bloc.


6.2.1 Les modes d’ouverture:

Les modes d’ouverture sont, (pour le mode texte) :

‘r’ : pour ouvir le fichier en mode lecture.

‘w’ : pour ouvrir le fichier en mode écriture, s’il existe pas il est créé, s’il existe il est écrasé.

‘a’ : en écriture en mode ajout, on écrit à la fin sans écraser le fichier et s’il n’existe pas il est créé.

Rajoutez un b à ces modes pour avoir leurs équivalent en mode binaire : rb, wb, ab.


6.3 Lire dans un fichier texte

Voyons maintenant comment lire dans un fichier. Vous allez voir qu’il y a differentes manières de le faire. Lire le fichier entier, une ligne,, un mot ou un caractère.


6.3.1 Lire le fichier

Pour lire un fichier entier c’est très simple mais pour commencer laissez-moi vous montrer le contenu du fichier ( pour que vous soyez sur qu’il a tout récupéré) :



Maintenant, regardez comment l’on s’y prend:



On utilise la méthode ‘read’ sur notre variable fichier, que l’on stocke dans une variable (que j’ai nommé texte ) et je l’affiche dans un print pour vous montrer le résultat :



C’est tout ce qu’il y a à savoir pour lire un fichier entier. Mais bien souvent, vous voudrez le traiter ligne par ligne ou mot par mot ou même caractère par caractère, alors nous voyons ça maintenant.


6.3.2 Lire une ligne

Pour lire le fichier ligne par ligne il y a deux solutions. Soit vous faites :



En utilisant la méthode ‘readlines’ (avec un s ) sur la variable fichier. Ce qui aura pour effet de renvoyer dans la variable ‘texte’ une liste de toutes les lignes du fichier. Regardez :



L’on voit très mal, comme à un précédent chapitre alors je vais faire ceci :



Voilà, là vous comprenez mieux qu’il s’agit d’une liste. Le résultat

La deuxième solution consiste à utiliser la méthode ‘readline’ sans s, et récupérera toute la ligne suivante (ici la première). Regardez :


Résultat :



Vous pouvez passer aussi un entier en argument qui défini le nombre de bytes que doit contenir la ligne. Regardez :

Résultat:




Les 20 premiers bytes sont récupérés.


6.3.3 Lire un mot

Pour récupérer un mot, je vous propose de regarder le code en premier :



Nous récupérons toutes les lignes dans une variable avec la méthode ‘readlines’ (avec s) puis nous faisons une boucle sur cette variable texte qui nous fournira à chaque tour de boucle (correspondant ici à ligne) la ligne courante.

Puis sur ligne nous utilisons la méthode split (qui sépare tous les mots d’une ligne) et nous les stockons ici dans ‘mots’.

Résultat :



Voici tous les mots dans une liste (sauf qu’ici, j’ai recréé la liste à chaque tour de boucle mais c’est pas important). Nous pouvons le faire autrement :


Je refais simplement une boucle sur ‘mots’ et j’affiche chaque mot. Résultat :




6.3.4 Lire un caractère

Pour lire un caractère nous restons sur le même principe. Regardez :




Je rajoute une nouvelle boucle imbriquée sur chaque mot et j’affiche les caractères.
Résultat :




Tout ceci est bien beau mais n’y a t’il pas un moyen plus optimisé de récupérer le texte de mon fichier ?
Oui, en effet. Et c’est ce que nous voyons maintenant.




En utilisant la méthode read qui lit tout le fichier et en lui donnant 1 en argument, elle lira le fichier caractère par caractère. C’est tout de même plus pratique.

Dans la condition de la boucle while j’ai simplement demandé à boucler tant que la taille de la variable texte était plus grande que 0. C’est à dire qu’au fur et à mesure qu’il récupère du texte, il arrive de plus en plus sur la fin du fichier et la variable texte quand elle sera à la fin, aura une taille de zéro caractère, c’est là que nous sortirons de la boucle.

Le même principe fonctionne pour les lignes du fichier :




Et puisque c’est le curseur qui se déplace au cours du fichier pour récupérer ce que vous demandez (ligne, caractères etc…) Vous pouvez demander à connaître la position du curseur à un moment donné.

Admettons que je veuille connaître la position du curseur après chaque ligne. Je devrais faire ça :




Regardez à la ligne 31, j’utilise la méthode ‘tell’ qui me renverra la position actuelle du curseur.
Résultat :





Pratique pour connaître la taille des lignes, il me suffira de faire la soustraction à chaque tour de boucle.
Mais sachez (et c’est tout aussi intéressant sinon plus) que si vous pouvez connaître la position du curseur vous pouvez aussi choisir de le placer à la position de votre choix.
Pour cela nous utiliserons la méthode ‘seek’ en lui donnant en argument la position en nombre de caractères depuis le début du fichier. Comme ceci :


Je récupère la première ligne et je lui demande de se placer directement à la position 159, puis dans la boucle j’affiche la ligne qu’il m’avait récupéré (la première) mais le curseur lui est bien à la position 159 ; donc à la ligne 33 quand je récupère la ligne suivante il concidère que c’est à partir du caractère 159. Regardez :




Ce sera aussi très pratique quand nous écrirons dans les fichiers. Ce que nous voyons tout de suite.

6.4 Ecrire dans un fichier texte

Voyons comment écrire dans un fichier texte. Tout d’abord nous devons changer le mode d’ouverture du fichier et le mettre à ‘w’ ou ‘a’ si nous voulons continuer un fichier sans l’écraser.

Ensuite nous allons utiliser la méthode ‘write’ sur notre objet ‘fichier’. Regardez le code suivant, je le détaille ensuite :



Je crée une variable ‘caractere’ qui va contenir mon texte. C’est très important qu’elle ne soit pas nulle sinon elle ne rentrera pas dans la boucle suivante, donc je lui assigne un espace comme texte.
Dans la boucle qui suit je dis qu’elle doit continuer tant que la taille de la variable ‘caractere’ (qui contiendra le texte) est plus grande que 0. Dès que la taille du texte que nous avons entré est nulle nous sortons de la boucle et le programme continuera.

Autrement le code de la boucle continuera et nous afficherons le print et attendrons que l’utilisateur entre du texte (ligne 31) qui sera stocké dans la variable ‘caractere’.

Ligne 32 nous envoyons la variable ‘caractere’ dans la méthode ‘write’ qui écrit dans le fichier.

Ligne 33 nous écrivons dans le fichier un ‘\n’, c’est à dire un retour à la ligne pour que le texte ne soit pas tout collé.

Voilà ce qui se passe : On vous demande de taper du texte et de terminer par la touche entrée, quand vous avez entré votre texte et tapé entrée, le texte est copié et on vous propose la même chose. Soit vous tapez entrée pour écrire une ligne vide et finir le programme, soit vous entrez du texte à nouveau.

Voici mon résultat :




On voit bien que la dernière fois que l’on m’a posé la question je n’ai rien entré et le programme s’est terminé.
Voici le contenu de mon fichier texte :



Voila ! Si cet article vous a plu, merci de le partager. Laissez vos questions en commentaires.




Aucun commentaire:

Enregistrer un commentaire