Master MIN Année 2025-2026
Devoir Libre : Manipulation de Fichiers &
Numpy
Automatisation et Persistance de Données Matricielles
Contexte
En calcul scientifique, les données ne proviennent pas toujours de l’entrée utilisateur. Elles sont
souvent stockées dans des fichiers textes massifs (logs de capteurs, résultats de simulations). L’objectif
de ce DL est de créer une chaîne de traitement complète en Python capable de :
1. Générer des données de test (matrices aléatoires) et les stocker sur le disque.
2. Lire ces fichiers, traiter l’information (Algèbre Linéaire) et produire un rapport.
1 Rappels Techniques : Fichiers et Modules
1. Importation et Système
Pour manipuler des fichiers, nous avons besoin du module os (Operating System) et pour le
calcul, de numpy.
1 import numpy as np
2 import os
3
4 # Obtenir le chemin du dossier courant
5 chemin_actuel = os . getcwd ()
6 # Joindre proprement des chemins ( compatible Windows / Linux / Mac )
7 chemin_complet = os . path . join ( chemin_actuel , " mon_fichier . txt " )
2. Lecture et Écriture Sécurisée
On utilise le bloc with open(...) as f: qui garantit la fermeture du fichier même en cas
d’erreur.
1 # ÉCRITURE ( ’ w ’ = write ) : Cr é e ou é crase le fichier
2 with open ( " data . txt " , " w " ) as f :
3 f . write ( " Ligne 1\ n " ) # \ n pour le saut de ligne
4
5 # LECTURE ( ’ r ’ = read ) : Lit le fichier existant
6 with open ( " data . txt " , " r " ) as f :
7 contenu = f . read () # Lit tout dans une seule chaine
8 # ou
9 lignes = f . readlines () # Lit chaque ligne dans une liste
2 Cahier des Charges
Vous devez rendre un script nommé matrix_tools.py contenant deux fonctions.
1
Master MIN Année 2025-2026
Mission 1 : Le Générateur
Implémentez la fonction gen_matrices(fname, n, m) qui génère un fichier de données brutes.
— Entrées :
— fname (str) : Nom du fichier cible (ex : "[Link]").
— n (int) : Taille des matrices carrées (n × n).
— m (int) : Nombre de matrices à générer.
— Spécifications :
1. Les coefficients doivent être des entiers aléatoires entre -100 et 100.
2. Écrire les m matrices à la suite dans le fichier.
3. Insérer une ligne vide entre chaque matrice pour les séparer.
Mission 2 : L’Analyste
Implémentez la fonction process_matrices(f_in, f_out) qui traite les données.
— Entrées : f_in (fichier source) et f_out (fichier rapport).
— Spécifications :
1. Vérifier si f_in existe (sinon afficher une erreur).
2. Lire le contenu et séparer les blocs de matrices (Astuce : split(’
n
n’)).
3. Convertir chaque bloc de texte en [Link].
4. Pour chaque matrice, écrire dans f_out :
— Le numéro de la matrice.
— Son déterminant (arrondi à 2 décimales).
— Son inverse si elle est inversible (si |det| > 10−9 ), sinon écrire "Singulière".
3 Exemple d’Exécution et Formatage
Voici à quoi doivent ressembler vos fichiers pour un appel :
gen_matrices("[Link]", 2, 2) suivi de process_matrices("[Link]", "[Link]")
Fichier rapport ([Link]) :
Console / Fichier Sortie
Fichier généré ([Link]) :
--- Matrice 1 ---
Console / Fichier Sortie Valeurs :
[[12 -4]
12 -4
[ 5 88]]
5 88
Det : 1076.00
Inverse :
-3 10
0.082 0.004
4 2
-0.005 0.011
--- Matrice 2 ---
...
Indication pour la conversion Texte → Matrice :
Une fois le fichier lu, vous aurez des chaînes de caractères. Pour passer d’une chaine "1 2" à une liste
[1, 2], utilisez la compréhension de liste :
1 ligne_texte = " 12 -4 "
2 ligne_liste = [ int ( x ) for x in ligne_texte . split () ]