4 Lecture et écriture de fichiers
Matériel fourni Un fichier texte nommé data, contenant un caractère UTF-8.
4.1 Deux modes d’ouverture des fichiers
Un fichier peut être lu dans deux modes différents avec Python. Soit il s’agit d’un fichier texte
et dans ce cas Python lira, et renverra, des caractères (qu’ils soient stockés sur 1, 2, 3 ou 4 octets),
soit il s’agit d’un fichier dit binaire (bien que cette appellation ait peu de sens, car les données sont
toujours représentées en binaire) et dans ce cas Python lira et renverra des octets.
Nous allons lire un fichier en utilisant ces deux modes pour bien cerner la différence.
Le mode de lecture est déterminé par le second paramètre passé à la fonction open. Le mode de
lecture par défaut est le mode texte. Pour lire (ou écrire un fichier) en mode binaire, il faut ajouter
un bà la chaîne de caractères correspondant au mode d’ouverture du fichier. Donc pour ouvrir
un fichier en lecture en mode binaire, il faut utiliser le mode rb et pour l’ouvrir en mode écriture
binaire il faut utiliser le mode wb.
4.2 Lecture de fichier
Question 20 Ouvrez le fichier data en lecture en mode texte ainsi qu’en mode binaire. Vous stockerez le
résultat de la fonction open dans deux variables stream_text et stream_bin respectivement pour le fichier
ouvert en mode texte et en mode binaire.
Ces deux variables correspondent à flux ouvert en lecture. Il est ensuite possible de lire un tel flux avec
la méthode read (que vous avez déjà utilisée dans d’autres contexte a priori ). De même, il est possible
d’écrire un flux (s’il a été ouvert en écriture), avec la méthode write. Un flux peut être, comme ici, un
fichier ouvert mais également une connexion réseau voire une chaîne de caractères. Le flux permet justement
de s’abstraire de la manière dont il a été obtenu. Dans ce TP, et dans les suivants, nous passerons souvent
des flux en paramètre. Gardez donc bien cela en tête.
Question 21 Lisez tout le flux en un seul appel à la méthode read() et stockez le résultat dans une
variable content_text (pour le flux ouvert en mode texte) et une variable content_bin (pour le flux ouvert
en mode binaire). Donnez la longueur lue pour les deux modes de lecture. Expliquez les résultats obtenus.
Question 22 Quel est le type de la variable content_bin ?
Question 23 Comment accéder au deuxième octet lu en mode binaire ?
4.3 Écriture de fichier
Nous allons maintenant écrire un fichier en mode binaire. Là encore le nom du mode est ambigu.
Cela ne signifie pas que nous allons écrire dans le fichier bit à bit, au contraire la fonction d’écriture
prend en entrée des octets.
Par exemple si output est un flux ouvert en écriture en mode binaire, output.write(bytes([65, 66]))
écrit les octets 65 et 66 dans le fichier (ce qui correspond aux caractères A et B).
Question 24 Ouvrir un nouveau fichier (nommé data.out) en écriture en mode binaire et écrire à l’intérieur
les octets 195 et 137. Il faut ensuite penser à fermer le fichier.
Question 25 Ouvrez maintenant le fichier avec un éditeur de texte (ce qui revient à l’ouvrir en mode
5