Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

python:bases:fichiers [2022/09/03 10:38] philpython:bases:fichiers [2025/06/19 19:29] (Version actuelle) – modification externe 127.0.0.1
Ligne 2: Ligne 2:
  
 ===== Python - Fichiers ===== ===== Python - Fichiers =====
-[Mise à jour le : 16/5/2022]+[Mise à jour le : 25/11/2024]
  
   * **Sources**   * **Sources**
Ligne 14: Ligne 14:
   * **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     |
Ligne 30: Ligne 30:
  
 ==== 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>
Ligne 68: Ligne 70:
  
 <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 ====
Ligne 77: Ligne 81:
 f.close() f.close()
 </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>
-<note tip>**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**.</note>+
  
 //Exemple// //Exemple//
Ligne 88: Ligne 93:
     pass     pass
 </code> </code>
 +
 +\\
  
 ==== 5. Ecrire dans un fichier ==== ==== 5. Ecrire dans un fichier ====
Ligne 114: Ligne 121:
  
 <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>
  
Ligne 172: Ligne 180:
 <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>
  
Ligne 187: Ligne 195:
 </code> </code>
  
-<note tip>Les fichiers étant des **itérateurs**, ils peuvent être placés dans une boucle **for**. Pour les lire **ligne à ligne**, on peut aussi boucler sur l’objet fichier. C’est plus efficace en termes de gestion mémoire, plus rapide et le code est plus simple.</note>+<callout type="tip" icon="true">Les fichiers étant des **itérateurs**, ils peuvent être placés dans une boucle **for**. Pour les lire **ligne à ligne**, on peut aussi boucler sur l’objet fichier. C’est plus efficace en termes de gestion mémoire, plus rapide et le code est plus simple.</callout>
  
 //Exemple// //Exemple//
Ligne 204: Ligne 212:
 > Troisième ligne > Troisième ligne
  
-<note tip>Pour construire une **liste** avec toutes les lignes d’un fichier, il est aussi possible d’utiliser //**list(f)**// ou //**f.readlines()**//.</note>+<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 ====
   * **Problème**   * **Problème**
Ligne 306: Ligne 318:
 - **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() ====
  
Ligne 340: Ligne 355:
  
 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 ====
  • python/bases/fichiers.1662194288.txt.gz
  • Dernière modification : 2025/06/19 19:25
  • (modification externe)