Lecture d’un fichier binaire

Contexte

Une archive zip est un moyen permettant l’archivage (utilisation d’un seul fichier pour stocker plusieurs fichiers) et la compression de données (diminution de l’espace occupé sur le support numérique) sans perte de qualité.

Le format zip est conçu de telle sorte qu’il n’est pas nécessaire de décompresser toute l’archive pour extraire un fichier.

Format zip

Comme la position de chaque fichier, ainsi que son nombre d’octets et d’autres informations sont disponibles dans le répertoire central situé en fin de fichier, on peut également lire le contenu d’un fichier sans le décompresser, ce qui s’avère parfois nécessaire lorsqu’on manipule des données très volumineuses.

Environnement de travail

Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex08-zip.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :

  1. Imports et définition des variables globales ;
  2. Définition des fonctions secondaires ;
  3. Définition de la fonction principale ;
  4. Appel protégé de la fonction principale.

On travaille ici avec des données publiques fournies par Météo France :

Le fichier ex08-zip-data-meteo-france-synop.2015110112.csv est un fichier texte (décompressé) qui a la même structure que les membres de l’archive. Il donne de précieuses informations sur l’organisation des données.

Objectifs

L’objectif est d’écrire une fonction extract_temp() :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Informations complémentaires

Python dispose du module zipfile pour manipuler les archives zip. En particulier ce module définit une classe ZipFile permettant de :

L’archive est un fichier binaire, et la lecture d’un de ses membres s’effectue donc en mode binaire avec la méthode read() qui retourne une séquence de bytes. Cette séquence de bytes est convertie en str avec la méthode bytes.decode().

La list ne permet pas une performance algorithmique optimale. La structure de données la plus appropriée à ce type de problème est le dictionnaire dict que nous verrons dans un autre exercice.

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex08_zip.py -v

La totalité des doctests doivent réussir.