TD Fichiers

Transcription

TD Fichiers
TD Fichiers
Introduction
Le but du TD est d'apprendre à manipuler des fichiers en Python, de manière à pouvoir lire et écrire des données
de manière pérenne. Les manipulations sont similaires dans d'autres langages.
On distingue :
• Les fichiers « textes » (codages de caractères, avec un encodage donné parmi ASCII, UTF-8, etc.). Ce sont
les scripts Python, les fichiers HTML ou CSS, les images au format PGMA, les feuilles de données au format
CSV, les SMS...
La fin des « lignes » est matérialisée par un « retour chariot » (CR ou \r codé x0D = 13 en ASCII) et/ou un
saut de ligne (LF \n codé x0A = 10) suivant les systèmes d'exploitation : MacOS code les fins de lignes avec
CR, Linux avec LF et Windows avec les deux à la suite.
• Les fichiers « binaires » (tous les autres, où l'on interprète les bits autrement que comme codages de
caractères). C'est le cas de la plupart des images, des sons, vidéos, documents de traitement de texte...
Prenons ici le cas d'un fichier image au format PGMA (PGM, donc en niveaux de gris, codé ici en ASCII). Par
exemple, on dans lena_mini_ascii.pgm du dossier img,
P2
# Lena, image dans le domaine public souvent utilisée pour les exercices...
69 87
255
173 174 158 119 ...
•
•
•
•
•
P2 est le « mot magique » qui indique que le format est le PGMA,
toute ligne commençant par # est un commentaire non pris en compte,
69 et 87 indiquent largeur et hauteur en pixels,
255 est la valeur maximale indiquant les niveaux de gris et
les nombres suivants séparés par des espaces ou retours à la ligne donnent les niveaux de gris des
différents pixels de 0 pour le blanc à 255 pour le noir. Normalement, la norme prévoit un maximum de 70 caractères par
ligne, mais c'est loin d'être toujours respecté et les logiciels ne semblent pas gênés pour autant, pour lire les images.
Travaux dirigés
1. Fichier « texte » : pour cette première étape, on va travailler sur lena_mini_ascii.pgm :
a. Éditer le fichier art-ASCII.py et détailler son fonctionnement.
(Globalement, le but est d'ouvrir le fichier précédent au format
PGMA et de créer un fichier texte dont les caractères permettent
de représenter l'image ; on se contente ici de quatre caractères
différents pour cet essai très limité d'Art-ASCII !)
0 @ 0 0 @ 0 + +
@ 0 0 0 @ + +
@ @ 0 0 0 +
+
+ +
+ + +
@ @ 0 0 + + + + + + +
@ @ 0 + +
+ + + +
@ 0 + + +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
@
@
@
0
@
0
@
0
0
@
@
0
@
@
@
@
0
@
@
@
@
0
@
@
@
@
@
@
0
0
@
0
0
@
@
0
0
0
0
0
0
@
@
@
0
0
0
0
@
0
0
@
@
@
@
0
0
0
+
+
0
0
+
0
0
0
0
0
0
0
0
0
0
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
@
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
+
0
0
0
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
@
@
@
@
@
0
0
0
0
0
@
0
@
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
+
+
0
0
@
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
+
0
+
0
0
0
0
0
0
@
0
@
@
@
@
0
0
@
@
@
0
@
0
@
@
@
0
0
0
0
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
+
0
0
@
0
0
0
0
@
0
@
0
@
@
0
@
@
@
@
@
@
0
0
@
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
@
@
@
0
0
0
0
0
0
@
@
0
0
0
+
0
0
0
0
0
@
@
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
@
@
0
0
@
0
0
0
@
0
0
0
0
0
0
0
0
0
0
+
+
0
0
@
0
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
0
+
+
+
+ +
+
+
+
+
+
0
0
0
0
0
0
0
+
+
+
+
0
0
@
0
0
0
+
+
+
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
@
0
@
@
@
@
@
@
@
@
@
@
@
0
0
0
+
+
0
0
0
+
0
+
+
0
@
0
0
0
0
@
0
0
0
0
+
0
@
0
0
0
0
0
+
0
0
0
0
0
@
0
@
@
@
@
@
@
0
@
@
@
@
@
@
@
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
0
0
@
0
0
@
0
0
0
0
@
@
@
@
@
0
0
+
+
0
0
0
0
0
0
+
0
+
0
0
0
@
0
0
@
@
@
0
@
@
@
@
@
@
0
0
@
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
0
0
0
0
+
0
0
@
0
@
@
@
@
@
@
@
@
@
@
@
@
+
+
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
@
@
0
0
0
0
@
@
0
@
@
@
0
0
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
@
@
0
@
@
@
@
@
@
@
@
0
0
@
@
0
+
0
0
0
+
+
0
0
+
0
0
0
0
0
0
@
0
@
0
+
0
0
@
0
0
@
+
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
@
0
@
0
@
0
0
0
@
@
0
0
@
@
@
0
+
+
+
+
+
0
0
0
0
0
+
+
+
0
0
0
+
+
+
0
@
0
+
0
0
0
0
@
+
0
+
+
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
+
0
0
0
0
0
0
0
0
@
0
0
0
0
0
0
0
0
@
@
0
0
@
0
@
0
+
+
+
0
@
+
0
+
0
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
+
+
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
+
+
0
0
+
+
0
0
0
0
0
0
0
@
@
@
0
0
0
0
0
0
+
@
@
@
0
0
0
@
+
+
+
0
+
0
@
@
@
@
+
0
0
0
0
0
0
+
0
0
0
@
0
@
0
0
@
@
@
0
+
+
+
+
0
0
0
0
0
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
0
+
+
0
0
0
0
0
0
0
@
@
@
0
@
@
@
@
0
0
0
+
0
+
0
@
@
0
+
+
0
+
0
@
@
@
@
@
@
0
0
0
0
@
@
0
+
@
0
+
0
@
@
@
@
@
@
@
+
+
+
+
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
+
+
0
0
0
0
+
+
+
0
+
+
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
0
0
0
@
@
@
+
0
0
0
0
@
@
@
@
@
@
@
@
0
0
0
+
+
+
+
@
@
0
@
@
@
@
@
@
@
@
+
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
0
0
+
0
+
+
+
0
+
+
0
+
+
0
+
0
0
@
@
@
@
@
@
@
0
0
@
@
@
@
@
@
@
@
0
+
0
+
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
@
@
@
@
@
@
@
@
@
@
+
+
0
0
+
0
0
0
0
+
+
+
+
0
0
0
+
+
+
+
+
0
0
+
+
+
+
+
+
+
0
+
0
0
0
0
0
@
@
@
@
0
@
@
@
@
@
@
@
@
@
@
@
0
+
+
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
@
@
@
@
@
@
@
@
@
0
+
+
+
0
+
+
0
0
+
+
+
+
+
0
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
0
+
0
0
0
@
@
@
@
@
@
@
@
0
@
@
@
@
@
@
0
0
+
+
+
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
@
@
0
@
@
@
@
@
@
@
@
0
0
+
+
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
0
+
+
+
+
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
+
0
+
+
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
@
0
@
@
@
@
@
@
@
@
@
0
0
+
+
+
@
@
@
@
@
@
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
@
0
0
0
+
+
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
0
0
+
+
+
+
+
+
+
+
+
+
+
0
0
@
0
@
@
0
@
@
@
@
@
@
@
@
0
+
+
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
@
0
0
0
+
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
@
0
@
@
0
0
@
0
@
@
0
+
+
+
+
@
@
@
@
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
@
0
0
0
0
+
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
@
0
@
0
0
@
0
@
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
@
@
@
@
@
0
0
0
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
@
0
@
@
@
@
@
0
0
+
+
@
0
0
0
0
0
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
@
0
0
0
0
0
+
0
+
+
0
0
0
0
+
+
+
+
+
+
+
0
0
0
0
+
+ + +
+ +
+
0
0
+
+
0
0
0
+
+
+
0
0
0
+
0
0
0
0
0
0
+
0
0
0
0
0
+
+
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
0
0
0
0
+
+
+
+
+
+
+
+
0
@
@
+
+
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
@
@
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+ +
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
0
@
@
0
0
0
0
0
0
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
0
0
@
@
@
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
0
0
0
@
@
@
@
@
+
+
+
+
+
+
0
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
@
@
@
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
0
0
@
0
@
@
@
0
+
+
+
+
+
0
@
0
+
+
+
+
+
+
+
+
+
0
+
+
0
0
0
0
0
0
@
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
0
0
0
0
0
+
+
+
+
+
@
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
+
+
+
+
+
0
@
@
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
@
@
0
+
+
+
+
+
+
+
0
@
@
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
+
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
@
0
+
+
+
+
+
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
+
+ +
+
+ +
+ +
+ +
+ +
0 0
0 0
@ @
0
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
0 0
0 0
0 0
0 0
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+ + + +
+ + + +
0 + + +
@ + + +
0 +
+
+
+
+ + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
+ + +
+ + + +
0 + + +
0 0 + +
0 0 + +
0 0 + +
0 0 0 +
+ 0 0 +
+ 0 0 +
+ + 0 +
+ + 0 0
+ + 0 +
0 0 0 0
0 0 0 0
0 + + 0
0 0 0 0
+ 0 + +
+ + + +
+ +
0 0 0 +
0 0 0 +
0 + + +
0 0 0 +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ + + +
+ + +
+
+
+ @
+ 0
0
+
+
+
+
+
+
+
+
+
0
+
0
0
+
+
+
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ 0
+ @ @
+ 0 0
+ + 0
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+ + +
+ + +
+ + 0
+ + 0
+ + @
+ @ @
0 @ @
@ @ @
@ @ @
@ @ @
0 @ @
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
@
0
+
0
0
+
0
+
+
+
0
+
0
0
@
@
@
@
@
@
@
@
@
@
+
+
0
@
0
0
@
0
0
0
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
0
@
@
0
0
0
+
0
0
@
@
@
@
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
+
+
+ +
+ +
+ +
+ + +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
+
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
0
0
0
0
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
+
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
@
0
0
0
0
0
0
0
0
0
0
0
@
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
+
+
+
+
+
+
0
0
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
@
@
0
0
0
0
@
0
+
0
+
+
+
+
+
+
+
0
0
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
0
@
@
@
@
@
@
+
0
0
+
+
+
0
0
0
0
0
+
+
+
+
+
+
+
+
0
0
0
0
0
@
@
@
@
@
@
@
@
@
@
@
@
0
0
@
@
@
@
@
@
@
@
@
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
@
@
@
@
@
@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
@
@
@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
@
@
+
+
+
+
0 0
0 0 0
0 + +
+ + +
+ @
0 @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
0 @ @
0 @ @
0 0 @
0 @ @
0 @ @
0 @ @
+ @ @
+ @ @
+ @ @
+ @ @
+ 0 @
+ 0 @
+ 0 0
+ 0 +
+ 0 +
0 + +
0 + +
0 + +
0 + +
@ + +
@ + +
0 + +
0 + 0
0 + 0
0 + +
0 + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
0 0 +
0 0 0
0 0 0
0 0 0
+ 0 0
0 0
0 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
0
+
+
0
0
+
+
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
+
+
+
+
+
+
+
+
+
+
+
+
0
0
+
+
+
+
+
+
+
+
+
+
+
0
0
0
0
0
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
+
+
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
@
0
0
0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
+
+
+
+
+
+
+
+
+
+
+
0
@
0
0
0
0
0
0
+
@
+ + @
+ 0 @
@ @
+ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ @
@ @ 0
@ @ +
@ 0 +
@ 0 +
@ + +
0 + +
0 + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
0 0 0
+ 0 0
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
0 + +
@ @ 0
@ @ @
0 @ @
0 0 0
0 0 0
0 0 0
0 0 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0 0 0
0 0 0
0 0
+ 0
0
+
+
+
+ +
+ +
+ + +
+ + +
+ + + +
+ + + +
+ + + 0
+ + + @
+ + 0 @
+ 0 @ @
+ @ @ @
0 @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ 0
@ @ @ +
@ @ 0 +
@ @ 0 +
@ @ + +
@ 0 + +
@ + + +
0 + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
0 + + +
0 0 0 0
0 0 0 +
+ + 0 +
+ + + +
+ + + +
+ + +
+ 0
+ +
+ +
+ + +
+ + + +
+ + +
+ + +
+
+
+
+
+
+ 0
0 0 0 0
0 0 0 0
0 0 0 0
b. Puis exécuter ce fichier et faire afficher le résultat dans une console (ou le visualiser dans un éditeur de
texte) :
Sur Linux (et MacOS?) : cat img/lena_art-ASCII.txt (changer de répertoire si nécessaire avec
cd dossier ou cd .. pour revenir au répertoire de rang supérieur).
Sur Windows, dans un interpréteur de commande (programmes / Accessoires / Invite de commande) :
type img\lena_art-ASCII.txt (changer de répertoire si nécessaire avec cd dossier ou cd .. pour
revenir au répertoire de rang supérieur).
c. On se contente ici d'une image avec une petite résolution, sans quoi la longueur des lignes dépasse ce qui
peut s'afficher sur une ligne unique et l'effet visuel est alors perdu... Que pourrait-on faire pour travailler
avec des images de résolution supérieure comme le lena_ascii.pgm fourni ?
2. Fichier binaire vs fichier texte : on s'intéresse maintenant à lena_mini_binaire.pgm :
a. Ouvrir lena_mini_ascii.pgm et lena_mini_binaire.pgm pour les comparer, d'abord avec un éditeur de
texte (ex. NotePad++, Geany...), puis avec un éditeur hexadécimal (ex. FrHed, WinHex, GHex...)
Quel est le « mot magique » pour ce format pgm en niveaux de gris binaire ? On trouve les autres
spécifications de ces formats sur https://fr.wikipedia.org/wiki/Portable_pixmap par exemple.
b. Comparer les avantages respectifs de chacun de ces deux formats.
c. Sur la copie d'écran en page suivante on a utilisé l'éditeur hexadécimal GHex. On a ouvert deux fichiers
qui représentent la même image en pgm, l'un en ASCII, l'autre en binaire.
Expliquer pourquoi on peut voir que les informations surlignées dans chacun des fichiers codent les
mêmes pixels de l'image.
d. Retrouver des correspondances analogues entre images en utilisant votre propre éditeur hexadécimal.
Repérer le codage utilisé pour les retours à la ligne et en déduire le système d'exploitation probablement
utilisé pour créer l'image.
3. Lire et écrire les fichiers binaires : on va travailler sur un fichier « mp3 », sans s'intéresser ici à la
signification des bits codant la partie sonore. Ce type de fichier contient aussi des informations textuelles.
a. Ouvrir le fichier mp3.py et analyser son fonctionnement.
b. Le modifier de manière à écrire son propre nom en tant qu'interprète dans le fichier copie.mp3 (pas très
correct comme attitude, mais c'est juste pour apprendre ici, donc pour la bonne cause...) On pourra
éventuellement vérifier le résultat dans un logiciel « lecteur mp3 » qui sait lire les TAGs...
c. Écrire
un
script
qui, à partir du contenu de lena_mini_binaire.pgm
au format PGMA (PGM ASCII).
crée
un
fichier
lena_copie_ascii.pgm
Remarque : on trouvera dans le fichier exceptions.py la manière de gérer plus proprement les opérations sur
les fichiers et plus généralement les erreurs dans l'exécution des programmes.