Lire et écrire des fichiers avec pathlib en Python

1. À propos de la lecture et de l'écriture avec pathlib

Le module pathlib permet de manipuler les chemins, les fichiers et les dossiers avec une approche orientée objet. La classe Path possède notamment des méthodes permettant de lire et d'écrire directement le contenu d'un fichier.

Pour les fichiers texte, les deux méthodes principales sont read_text() et write_text(). Pour les fichiers binaires, pathlib fournit également read_bytes() et write_bytes().

Le programme suivant importe la classe Path et crée un chemin représentant le fichier cours.txt.

Sortie :

2. Créer un chemin vers un fichier avec Path

Avant de lire ou d'écrire un fichier avec pathlib, nous créons généralement un objet Path représentant son chemin. La création de cet objet ne crée pas automatiquement le fichier sur le disque.

Le programme suivant crée un chemin vers le fichier cours.txt situé dans le dossier documents.

Sortie :

Nous pouvons également fournir les différentes parties du chemin directement à Path().

Sortie :

3. Écrire du texte avec Path.write_text()

La méthode Path.write_text() permet d'écrire une chaîne de caractères dans un fichier texte. Si le fichier n'existe pas, il est créé. S'il existe déjà, son contenu est remplacé.

Le programme suivant écrit le texte Bienvenue au cours Python dans le fichier cours.txt. La méthode retourne le nombre de caractères écrits.

Sortie :

Le fichier cours.txt contient alors :

Il faut retenir que write_text() ne fonctionne pas comme un mode d'ajout. Un nouvel appel remplace le contenu précédent du fichier.

4. Lire un fichier avec Path.read_text()

La méthode Path.read_text() permet de lire entièrement un fichier texte et retourne son contenu sous forme de chaîne de caractères.

Supposons que cours.txt contienne le texte Bienvenue au cours Python. Le programme suivant lit puis affiche son contenu.

Sortie :

Nous pouvons également utiliser directement le résultat de read_text() sans passer par une variable intermédiaire.

Sortie :

5. Utiliser l'encodage UTF-8

Lors de la manipulation de fichiers texte, il est recommandé de préciser explicitement l'encodage. L'encodage UTF-8 permet notamment de gérer correctement les caractères accentués et de nombreux alphabets.

Le programme suivant écrit un texte contenant plusieurs caractères accentués en utilisant encoding="utf-8".

Sortie :

Pour relire correctement le fichier, nous utilisons le même encodage avec read_text().

Sortie :

6. Écrire plusieurs lignes dans un fichier

La méthode write_text() reçoit une chaîne de caractères. Pour écrire plusieurs lignes, nous pouvons donc insérer le caractère spécial \n entre les différentes lignes.

Le programme suivant crée un fichier contenant trois lignes.

Sortie :

Le fichier cours.txt contient :

Nous pouvons également partir d'une liste et utiliser join() pour construire automatiquement le texte à écrire.

Sortie :

Le fichier langages.txt contient :

7. Ajouter du contenu à un fichier

La méthode write_text() remplace le contenu existant et ne possède pas de paramètre correspondant directement au mode d'ajout a. Pour ajouter du contenu sans effacer le texte existant, nous pouvons utiliser la méthode Path.open() avec le mode "a".

Le programme suivant ajoute une nouvelle ligne à la fin du fichier cours.txt.

Sortie :

Si le fichier contenait auparavant les lignes Python, Java et JavaScript, son contenu devient :

L'utilisation de with permet de fermer automatiquement le fichier après l'opération.

8. Lire un fichier ligne par ligne

La méthode read_text() charge tout le contenu du fichier en mémoire. Pour parcourir un fichier ligne par ligne, notamment lorsqu'il est volumineux, nous pouvons utiliser Path.open() avec le mode de lecture "r".

Le programme suivant ouvre cours.txt puis parcourt ses lignes avec une boucle for.

Sortie possible :

La méthode strip() supprime ici le caractère de fin de ligne avant l'affichage afin d'éviter des lignes vides supplémentaires produites par print().

9. Lire et écrire des données binaires

Les fichiers ne contiennent pas toujours du texte. Pour manipuler des données binaires, la classe Path fournit les méthodes write_bytes() et read_bytes().

La méthode write_bytes() écrit un objet de type bytes dans un fichier et retourne le nombre d'octets écrits.

Sortie :

La méthode read_bytes() permet ensuite de récupérer les données binaires enregistrées dans le fichier.

Sortie :

10. Vérifier l'existence du fichier avant la lecture

Si nous utilisons read_text() sur un fichier inexistant, Python déclenche une exception. La méthode exists() permet de vérifier l'existence du chemin avant la lecture.

Le programme suivant lit cours.txt uniquement si le chemin existe.

Sortie possible :

Pour vérifier que le chemin correspond réellement à un fichier ordinaire, nous pouvons utiliser is_file() à la place de exists().

Sortie possible si le fichier n'existe pas :

11. Gérer les erreurs de lecture et d'écriture

Une opération de lecture ou d'écriture peut échouer pour différentes raisons : fichier inexistant, permissions insuffisantes ou chemin incorrect. Une structure try...except permet de gérer ces erreurs sans interrompre brutalement le programme.

Le programme suivant intercepte FileNotFoundError lorsque le fichier demandé n'existe pas.

Sortie :

Lors d'une écriture, nous pouvons également intercepter une erreur de permission avec PermissionError.

Sortie possible :

12. A retenir !

Le module pathlib permet de lire et d'écrire facilement des fichiers en utilisant les méthodes de la classe Path.

  • Path() permet de représenter le chemin d'un fichier.
  • write_text() écrit du texte dans un fichier et remplace son contenu existant.
  • read_text() lit entièrement un fichier texte.
  • encoding="utf-8" permet de préciser l'encodage des fichiers texte.
  • \n permet d'insérer un saut de ligne dans une chaîne.
  • Path.open() permet d'utiliser les modes classiques comme "r", "w" et "a".
  • Le mode "a" permet d'ajouter du contenu à la fin d'un fichier.
  • Path.open() permet de parcourir efficacement un fichier ligne par ligne.
  • write_bytes() permet d'écrire des données binaires.
  • read_bytes() permet de lire des données binaires.
  • is_file() permet de vérifier qu'un chemin représente un fichier.
  • try...except permet de gérer les erreurs de lecture et d'écriture.

Le programme suivant résume une opération complète : écrire du texte dans un fichier, vérifier son existence puis relire son contenu.

Sortie :

 


 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


Leave a Reply

Your email address will not be published. Required fields are marked *