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.