Les Fichiers
Dans de très nombreuses situations, un programme doit pouvoir récupérer ou écrire des informations dans un fichier. Ce chapitre propose de découvrir les fonctions de Python permettant de le faire. Nous utiliserons trois exemples de fichiers disponibles en téléchargement ci-dessous :
- le fichier informaticiens.txt qui contient une liste d'informaticiens célèbres
- le fichier films.txt qui contient une liste de films.
- le fichier dates.txt qui contient une liste de dates au format
JJ/MM/AAAA.
Danger
Avant de continuer télécharger ces fichiers (clic droit sur leurs noms puis Enregistrer la cible du lien sous ...) dans un dossier de votre choix, par la suite vous sauvegarderez vos scripts Python de ce chapitre dans ce même répertoire.
Ouverture d'un fichier en lecture seule⚓︎
Pour ouvrir un fichier, on utilise la fonction open, cette fonction prend comme paramètre le nom du fichier et elle renvoie une variable appelée descripteur de fichier. Par exemple, dans l'instruction suivante :
| Python | |
|---|---|
lecteur est notre descripteur de fichier, et nous avons ouvert le fichier ayant pour nom sur le disque dur : informaticiens.txt. Il faut interpréter un descripteur de fichier comme un canal de lecture pour accéder à ce fichier.
Si après avoir exécuté le programme ci-dessous vous obtenez un FileNotFoundError: [Errno 2] No such file or directory: c'est que Python ne trouve pas sur votre disque dur le fichier que vous essayez d'ouvrir, on rappelle que le programme Python et le fichier doivent se trouver dans le même répertoire !
A retenir
- La fonction #!python
openpermet d'ouvrir un fichier présent dans le dossier courant. - Cette fonction prend en paramètre un nom de fichier et renvoie un descripteur de fichier.
- L'erreur
FileNotFoundErrorindique que le fichier n'a pas été trouvé.
Lecture d'un fichier⚓︎
Si l'instruction lecteur = open("informaticiens.txt") s'est produite correctement, on dispose maintenant d'un canal de lecture vers le fichier. Pour lire les données on utilise la fonction read sur ce descripteur :
| Python | |
|---|---|
Comme vous pouvez le constater, la fonction read lit la totalité du fichier en une seule fois !
D'autre part, une fois le fichier lu tout se passe comme si le descripteur de fichier lecteur était arrivé à la fin du fichier, ainsi une deuxième lecture du fichier ne retournera plus aucune donnée (la fin de fichier est déjà atteinte).
| Python | |
|---|---|
La variable deuxieme_lecture est vide le descripteur de fichier étant positionné "à la fin" il n'y a plus d'informations à lire.
A retenir
- La fonction
readpermet de lire la totalité d'un fichier ouvert avecopen. - Après lecture, le descripteur de fichier est positionné en fin de fichier et il n'y a plus d'information à lire.
Une bonne pratique de programmation consiste à fermer un fichier après l'avoir utilisé. C'est le rôle de l'instruction close, le programme précédent devrait donc se terminer par lecteur.close().
- En utilisant Python, ouvrir le fichier films.txt
- Lire ce fichier et en afficher le contenu
- Fermer ce fichier
Au lieu de lire la totalité d'un fichier en une seule fois, il peut être préférable d'en récupérer les lignes soit dans une liste, soit une à une :
-
afin de récupérer les lignes d'un fichier dans une liste, on peut utiliser
readlines:On remarquera bien la différence avecPython read: ici on obtient une liste, ce qui permet par exemple d'accéder directement à une ligne en particulier du fichier :print(lignes[5]). -
une autre possibilié est d'utiliser
readlinequi a pour effet de lire une seule ligne du fichier puis de positionner le descripteur de fichier sur la ligne suivante : -
En utilisant
readlineslire dans une liste les films présents dans le fichiersfilms.txt. Quel film se trouve sur la ligne 4 (on numérote les lignes à partir de 0). - Même question en utilisant
readline
Ecriture dans un fichier⚓︎
Pour écrire dans un fichier, il faut l'ouvrir en mode 'w' (pour write), si le fichier n'existe pas sur votre disque dur, il sera automatiquement crée :
| Python | |
|---|---|
prenoms.txt est crée dans votre répertoire.
- Ouvrir le fichier prenoms.txt, le lire et en afficher le contenu Ă l'aide de Python. Que remarquez-vous ?
- Comment ajouter les sauts de lignes ?
Traitement sur les lignes⚓︎
Souvent, chaque donnée d'un fichier se trouve sur une ligne, par exemple le fichier dates.txt (que vous du déjà téléchargé dans votre répertoire travail) contient une date par ligne. En lisant ce fichier avec readlines, on récupère donc une listes de dates mais le saut de ligne final est présent :
| Python | |
|---|---|
strip qui s'applique sur une chaines de caractères et renvoie une copie de cette chaine sans les sauts de lignes ou espace de début et de fin, ce qui donne :
| Python | |
|---|---|
split qui s'applique sur une chaine de caractères et prend en argument un séparateur. Cette fonction renvoie les sous chaines construites en découpant la chaine de départ suivant le caractère séparateur. Par exemple :
| Python | |
|---|---|
| Python | |
|---|---|
Exercices de synthèse⚓︎
-
Entiers
- Le fichier entiers.txt contient sur chaque ligne un entier. Quelle est la somme de tous ces entiers ?
Solution
Text Only 1 2 3 4 5 6 7 8 9 10
```python f = open("entiers.txt") # avec readlines() lignes = f.readlines() # contenu du fichier dans une liste de str somme = 0 # parcours de toutes les lignes for ligne in lignes: somme += int(ligne) # conversion de la ligne (type str) en entier ```- Ecrire une fonction qui prend en paramètre un nom de fichier et retourne le nombre de lignes de ce fichier. ??? solution
Aide
Les données lues dans un fichier sont toujours des chaines de caractères (type
str), si on les additionne avec+cela correspond donc à la concaténation des chaines de caractères (comme dans"20" + "24"qui donne"2024"). Pour traiter les valeurs lues dans le fichier comme des entiers, il faudra donc au préalable les convertir en entier !Exemple
int("125")est Ă©valuĂ© Ă125. -
Dictionnaire Pour cet exercice on utilise le dictionnaire.txt:
Note
- Pour éviter le problème avec les caractères non ASCII (accents...) on précise un paramètre supplémentaire : l'encodage.
- La fonction qui ouvre le fichier devient :
open('dictionnaire.txt', 'r', encoding='utf-8')
- Combien y a-t-il de mots dans ce dictionnaire ?
- Combien y a-t-il mots de 17 lettres de ce dictionnaire.
- Quel est le plus grand mot de ce dictionnaire ?
- Lister tous les mots de 5 lettres qui ont un d en deuxième position et se terminent par un e.
- Lister tous les mots palindromes de ce dictionnaire (un mot palindrome est un mot pouvant se lire indifféremment dans les deux sens par exemple kayak ou été)
-
Les boîtes Le fichier boites.txt est téléchargeable ci-dessous, chaque ligne de ce fichier contient la référence d'un modèle de boîte sous la forme d'un code à 4 lettres suivi de trois entiers représentant les dimensions de la boîte. A titre d'exemple, les trois premières lignes du fichier sont :
Donc, la boite de référenceNWLRa comme dimension283x75x46.- Trouver la référence de la boite ayant le plus grand volume et indiquer la valeur du volume.