python:bases:fichiers

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:bases:fichiers [2021/08/11 09:19] – modification externe 127.0.0.1python:bases:fichiers [2022/09/03 10:40] (Version actuelle) – [Python - Fichiers] phil
Ligne 1: Ligne 1:
 {{ :suivant.png?nolink&30|}} {{ :retour.png?nolink&30|}} [[:python:accueilpython|{{ :iconemaison.jpg?nolink&30|Sommaire Python et microPython}}]] {{ :suivant.png?nolink&30|}} {{ :retour.png?nolink&30|}} [[:python:accueilpython|{{ :iconemaison.jpg?nolink&30|Sommaire Python et microPython}}]]
  
-===== Les fichiers ===== +===== Python - Fichiers ===== 
-[Mise à jour le : 12/7/2021] +[Mise à jour le : 16/5/2022]
-{{ :python:fichierpy.jpg?80|}}+
  
   * **Sources**   * **Sources**
Ligne 9: Ligne 8:
  
   * **Lectures connexes**   * **Lectures connexes**
-     * **Real Python** - <html><a href="https://realpython.com/python-interview-problem-parsing-csv-files/" target="_blank">Python Interview Problem – Parsing CSV Files</a></html>+     * **Real Python**  
 +       - <html><a href="https://realpython.com/python-interview-problem-parsing-csv-files/" target="_blank">Python Interview Problem – Parsing CSV Files</a></html> 
 +       - <html><a href="https://realpython.com/read-write-files-python/" target="_blank">Reading and Writing Files in Python (Guide)</a></html>
  
   * **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 27: Ligne 28:
  
 ---- ----
 +
 ==== 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. 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.
 +
 ==== 2. Ouvrir un fichier ==== ==== 2. Ouvrir un fichier ====
-<note>On utilise la fonction **open**() pour ouvrir un fichier. open renvoie un **objet fichier**.</note>+<callout type="primary" icon="true">On utilise la fonction **open**() pour ouvrir un fichier. open renvoie un **objet fichier**.</callout>
  
 <code python *.py> <code python *.py>
Ligne 45: Ligne 48:
   * l'**encodage** à privilégier est **utf-8**   * l'**encodage** à privilégier est **utf-8**
  
-<note>Par défaut, les fichiers sont ouverts en mode texte. On peut ajouter **b** à **r**, **w** et **a** pour spécifier que le fichier est ouvert en mode **binaire**. On ne doit spécifier l'encodage que pour les fichiers en mode texte.</note+<callout type="primary" icon="true">Par défaut, les fichiers sont ouverts en mode texte. On peut ajouter **b** à **r**, **w** et **a** pour spécifier que le fichier est ouvert en mode **binaire**. On ne doit spécifier l'encodage que pour les fichiers en mode texte.</callout>
  
 //Exemple// : ouverture d'un fichier **en lecture**. //Exemple// : ouverture d'un fichier **en lecture**.
Ligne 64: Ligne 67:
 </code> </code>
  
-<note>Si un fichier **à ouvrir en écriture** n'existe pas, il est automatiquement créé. </note>+<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 ====
-<note warning>Un fichier ouvert doit être fermé après son utilisation pour qu'une autre application puisse y accéder. Pour cela, on **doit** utiliser la fonction **close()** ou ouvrir et fermer le fichier avec **with** (cette dernière méthode est à privilégier voir plus loin).</note>+<callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">Un fichier ouvert doit être fermé après son utilisation pour qu'une autre application puisse y accéder. Pour cela, on **doit** utiliser la fonction **close()** ou ouvrir et fermer le fichier avec **with** (cette dernière méthode est à privilégier voir plus loin).</callout>
  
 //Exemple// //Exemple//
Ligne 76: Ligne 80:
 ==== 4. Ouvrir et fermer automatiquement un fichier avec with ==== ==== 4. Ouvrir et fermer automatiquement un fichier avec with ====
  
-<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>+<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>
  
 //Exemple// //Exemple//
Ligne 86: Ligne 90:
  
 ==== 5. Ecrire dans un fichier ==== ==== 5. Ecrire dans un fichier ====
-<note>On utilise la méthode **write** en lui passant en paramètre la chaîne à écrire dans le fichier. Elle renvoie le nombre de caractères qui ont été écrits.</note>+<callout type="primary" icon="true">On utilise la méthode **write** en lui passant en paramètre la chaîne à écrire dans le fichier. Elle renvoie le nombre de caractères qui ont été écrits.</callout>
  
 <code python *.py> <code python *.py>
Ligne 109: Ligne 113:
 </code> </code>
  
-<note warning>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.</note>+<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 ===
-<note>On utilise la méthode **read**() de la classe **TexteIoWrapper** pour lire l'intégralité d'un fichier.</note>+ 
 +<callout type="primary" icon="true">On utilise la méthode **read**() de la classe **TexteIoWrapper** pour lire l'intégralité d'un fichier.</callout>
  
 // Exemple 1a // : ouverture avec **with**, on ne gère pas l'exception //FileNotFoundError// (**à privilégier**) // Exemple 1a // : ouverture avec **with**, on ne gère pas l'exception //FileNotFoundError// (**à privilégier**)
Ligne 166: Ligne 170:
  
  
-<note>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]]".</note>+<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 Lecture du fichier ligne par ligne ===
-<note>**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.</note>+<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>
  
 > **\n** n’est omis que sur la dernière ligne du fichier. Si f.readline() renvoie une chaîne vide, c’est que la fin du fichier a été atteinte, alors qu’une ligne vide est représentée par '\n' (une chaîne de caractères ne contenant qu’une fin de ligne). > **\n** n’est omis que sur la dernière ligne du fichier. Si f.readline() renvoie une chaîne vide, c’est que la fin du fichier a été atteinte, alors qu’une ligne vide est représentée par '\n' (une chaîne de caractères ne contenant qu’une fin de ligne).
Ligne 183: Ligne 187:
 </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 200: Ligne 204:
 > 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 298: Ligne 303:
 </code> </code>
  
-<note warning>Certains types de base ne sont pas supportés par le format JSON (+<callout icon="fa fa-hand-stop-o" color="red" title="ATTENTION">Certains types de base ne sont pas supportés par le format JSON (
 car ils ne sont pas natifs en JavaScript), c'est le cas notamment pour : \\ car ils ne sont pas natifs en JavaScript), c'est le cas notamment pour : \\
 - **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).</note>+- **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 359: Ligne 364:
 ====Pour aller plus loin ... ==== ====Pour aller plus loin ... ====
   * <html><a href="https://realpython.com/python-with-statement/" target="_blank">Context Managers and Python's with Statement</a></html>   * <html><a href="https://realpython.com/python-with-statement/" target="_blank">Context Managers and Python's with Statement</a></html>
-  * <html><a href="https://realpython.com/python-interview-problem-parsing-csv-files/" target="_blank">Python Practice Problems: Parsing CSV Files</a></html>+  * <html><a href="https://realpython.com/why-close-file-python/" target="_blank">Why Is It Important to Close Files in Python?</a></html> 
 +  * **CSV** 
 +    * <html><a href="https://realpython.com/python-csv/" target="_blank">Reading and Writing CSV Files in Python</a></html> 
 +    * <html><a href="https://realpython.com/python-interview-problem-parsing-csv-files/" target="_blank">Python Practice Problems: Parsing CSV Files</a></html>
   * <html><a href="https://realpython.com/python-json/" target="_blank">Working With JSON Data in Python</a></html>   * <html><a href="https://realpython.com/python-json/" target="_blank">Working With JSON Data in Python</a></html>
   * <html><a href="https://realpython.com/python-pathlib/" target="_blank">Python 3's pathlib Module: Taming the File System</a></html>   * <html><a href="https://realpython.com/python-pathlib/" target="_blank">Python 3's pathlib Module: Taming the File System</a></html>
   * <html><a href="https://realpython.com/python-mmap/" target="_blank">Python mmap: Improved File I/O With Memory Mapping</a></html>   * <html><a href="https://realpython.com/python-mmap/" target="_blank">Python mmap: Improved File I/O With Memory Mapping</a></html>
  • python/bases/fichiers.1628666361.txt.gz
  • Dernière modification : 2021/08/11 09:19
  • de 127.0.0.1