| |
| python:bases:fichiers [2022/09/03 10:40] – phil | python:bases:fichiers [2025/06/19 19:29] (Version actuelle) – modification externe 127.0.0.1 |
|---|
| |
| ===== Python - Fichiers ===== | ===== Python - Fichiers ===== |
| [Mise à jour le : 16/5/2022] | [Mise à jour le : 25/11/2024] |
| |
| * **Sources** | * **Sources** |
| * **Mots-clés** : itérateur, ouverture, lecture, écriture, fermeture, module pickle, context manager. | * **Mots-clés** : itérateur, ouverture, lecture, écriture, fermeture, module pickle, context manager. |
| |
| <note important>Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</note> | <callout type="warning" icon="true">Les mots ci-dessous sont dits "réservés". Ils ne peuvent pas être utilisés comme nom de variable. Les mots __soulignés__ sont une nouveauté de Python 3. Les mots en **gras** sont utilisés dans cette page.</callout> |
| |
| | and | continue | finally | is | raise | | | and | continue | finally | is | raise | |
| |
| ==== 1. Généralités ==== | ==== 1. Généralités ==== |
| Un fichier est un **itérateur**. Il est donc **itérable** puisqu'on peut le **lire par une boucle for**. Mais il est aussi **son propre itérateur**. Cela implique que l'on ne peut le parcourir qu'une fois dans une boucle for. Pour le reparcourir, il faut le fermer et l'ouvrir de nouveau. Ecrire deux boucles for imbriquées sur le même objet fichier ne fonctionnerait pas. | <callout type="primary" title="Itérateur" icon="true">Un fichier est un **itérateur**. Il est donc **itérable** puisqu'on peut le **lire par une boucle for**. Mais il est aussi **son propre itérateur**. Cela implique que l'on ne peut le parcourir qu'une fois dans une boucle for. Pour le reparcourir, il faut le fermer et l'ouvrir de nouveau. Ecrire deux boucles for imbriquées sur le même objet fichier ne fonctionnerait pas.</callout> |
| | |
| | \\ |
| |
| ==== 2. Ouvrir un fichier ==== | ==== 2. Ouvrir un fichier ==== |
| <callout type="primary" icon="true">On utilise la fonction **open**() pour ouvrir un fichier. open renvoie un **objet fichier**.</callout> | <callout type="info" icon="true">On utilise la fonction **open**() pour ouvrir un fichier. open renvoie un **objet fichier**.</callout> |
| |
| <code python *.py> | <code python *.py> |
| |
| <callout type="primary" icon="true">Si un fichier **à ouvrir en écriture** n'existe pas, il est automatiquement créé.</callout> | <callout type="primary" icon="true">Si un fichier **à ouvrir en écriture** n'existe pas, il est automatiquement créé.</callout> |
| | |
| | \\ |
| |
| ==== 3. Fermer un fichier ==== | ==== 3. Fermer un fichier ==== |
| </code> | </code> |
| |
| ==== 4. Ouvrir et fermer automatiquement un fichier avec with ==== | \\ |
| |
| | ==== 4. Ouvrir et fermer automatiquement un fichier avec with ==== |
| <callout type="tip" icon="true">**with** permet d'ouvrir un fichier en s'assurant qu'il sera automatiquement fermé après sont utilisation qu'une exception se produise ou non. **Cette méthode est a privilégier**.</callout> | <callout type="tip" icon="true">**with** permet d'ouvrir un fichier en s'assurant qu'il sera automatiquement fermé après sont utilisation qu'une exception se produise ou non. **Cette méthode est a privilégier**.</callout> |
| |
| pass | pass |
| </code> | </code> |
| | |
| | \\ |
| |
| ==== 5. Ecrire dans un fichier ==== | ==== 5. Ecrire dans un fichier ==== |
| |
| <callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">La méthode **write** accepte uniquement des chaînes de caractères. Il faudra donc convertir les autres types en chaîne avant de les écrire dans un fichier texte.</callout> | <callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">La méthode **write** accepte uniquement des chaînes de caractères. Il faudra donc convertir les autres types en chaîne avant de les écrire dans un fichier texte.</callout> |
| | |
| | \\ |
| |
| ==== 6. Lire le contenu d'un fichier ==== | ==== 6. Lire le contenu d'un fichier ==== |
| === 6.1 Lire l'intégralité d'un fichier === | === 6.1 Lire l'intégralité d'un fichier === |
| |
| <callout type="primary" icon="true">On utilise la méthode **read**() de la classe **TexteIoWrapper** pour lire l'intégralité d'un fichier.</callout> | <callout type="primary" icon="true">On utilise la méthode **read**() de la classe **TexteIoWrapper** pour lire l'intégralité d'un fichier.</callout> |
| |
| <callout type="primary" icon="true">Après ouverture et transfert de son contenu dans une variable de type str, le contenu du fichier peut être traité avec les méthodes de la classe string. Voir "[[python:bases:chaines|Les séquences - Chaînes de caractères]]".</callout> | <callout type="primary" icon="true">Après ouverture et transfert de son contenu dans une variable de type str, le contenu du fichier peut être traité avec les méthodes de la classe string. Voir "[[python:bases:chaines|Les séquences - Chaînes de caractères]]".</callout> |
| |
| === 6.2 Lecture du fichier ligne par ligne === | === 6.2 Lire un fichier ligne par ligne === |
| <callout type="primary" icon="true">**readline** lit une seule ligne du fichier; un caractère de fin de ligne (**\n**) doit être présent à la fin de la chaîne.</callout> | <callout type="primary" icon="true">**readline** lit une seule ligne du fichier; un caractère de fin de ligne (**\n**) doit être présent à la fin de la chaîne.</callout> |
| |
| <callout type="tip" icon="true">Pour construire une **liste** avec toutes les lignes d’un fichier, il est aussi possible d’utiliser //**list(f)**// ou //**f.readlines()**//.</callout> | <callout type="tip" icon="true">Pour construire une **liste** avec toutes les lignes d’un fichier, il est aussi possible d’utiliser //**list(f)**// ou //**f.readlines()**//.</callout> |
| |
| | \\ |
| |
| ====7. Fichier binaire ==== | ====7. Fichier binaire ==== |
| A faire | A faire |
| | |
| | \\ |
| |
| ==== 8. Enregistrer un objet dans un fichier ==== | ==== 8. Enregistrer un objet dans un fichier ==== |
| - **tuple**, qui se fait encoder comme une liste ; \\ | - **tuple**, qui se fait encoder comme une liste ; \\ |
| - **complex**, **set** et **frozenset**, que l'on ne peut pas encoder du tout (sans étendre la bibliothèque).</callout> | - **complex**, **set** et **frozenset**, que l'on ne peut pas encoder du tout (sans étendre la bibliothèque).</callout> |
| | |
| | \\ |
| | |
| ==== 9. Les built-in repr() et flush() ==== | ==== 9. Les built-in repr() et flush() ==== |
| |
| |
| Il y a des cas où ce comportement peut s'avérer gênant, et où on a besoin d'écrire immédiatement (et donc de vider le buffer), et c'est le propos de la méthode //flush//. | Il y a des cas où ce comportement peut s'avérer gênant, et où on a besoin d'écrire immédiatement (et donc de vider le buffer), et c'est le propos de la méthode //flush//. |
| | |
| | \\ |
| |
| ====10. Utilitaires ==== | ====10. Utilitaires ==== |