Jusqu'ici, on tapait les donnees dans le code : pratique pour deux ou trois valeurs.
Mais les releves de terrain (des centaines de lignes !) vivent dans des fichiers. Lire un fichier = faire entrer ces donnees dans le programme sans les retaper.
Une fois la lecture des donnees automatisee, le programme peut produire a la chaine de nouveaux fichiers et meme des bases de donnees volumineuses - sans plus jamais retaper une valeur a la main.
Un programme scientifique utile sait ouvrir un carnet de terrain, lire chaque ligne, et en extraire les valeurs.
Mille mesures restent dans le fichier, pas collées dans le programme : le code reste court et lisible.
Le même programme tourne sur d'autres valeurs plus tard : on change le fichier, pas le code.
On écrit le programme une seule fois, puis on le relance sur chaque nouveau carnet de terrain.
Texte brut, une information par ligne. Simple, direct, lisible par n'importe qui.
Valeurs separees par des virgules. Une grille comme un tableur : une ligne par observation, une colonne par variable.
.xlsx (Excel) : meme idee en grille, lu et ecrit avec pandas (voir plus loin)./content = ton dossier de travailsample_data = exemples · drive = ton Google DriveLe panneau de fichiers (icône dossier, à gauche) montre /content : le dossier où ton programme travaille. open("foret.csv") cherche le fichier juste là.
/content est éphémèreLes fichiers téléversés dans /content vivent sur une machine temporaire. Dès que la session se déconnecte ou redémarre (inactivité, environ 90 min), ils disparaissent - il faut les re-téléverser.
Les répertoires : /content (travail, éphémère) · /content/sample_data (exemples) · /content/drive/MyDrive (ton Drive, lui, permanent une fois monté).
Trois façons d'amener un fichier dans Colab : !wget le télécharge du web, drive.mount branche ton Drive (rien ne se reperd !), files.upload() ouvre une fenêtre de choix. Pour garder tes données entre deux séances, le Drive est le plus sûr.
with ouvre le fichier ET le referme tout seul a la fin du bloc - meme si une erreur survient. .read() lit tout le contenu d'un coup et le range dans une chaine de caracteres.
.read()for.read() charge tout le fichier d'un coup dans une chaine - simple pour un petit fichier. La boucle ligne par ligne n'en garde qu'une a la fois - indispensable pour les gros fichiers. .strip() enleve le retour de ligne invisible colle au bout de chaque ligne.
\n invisible et .strip()\n est un seul caractere (le retour a la ligne) que Python garde au bout de chaque ligne lue : invisible a l'oeil, mais bien la. .strip() enleve les espaces et les retours de ligne colles au debut et a la fin - d'ou le reflexe ligne.strip() avant de decouper ou de comparer.
read()read() donne tout en un seul bloc de texte, avec des retours de ligne \n invisibles au bout de chaque ligne. .splitlines() le recoupe en une liste de lignes, sur laquelle on peut alors boucler. (contenu.split("\n") fait presque pareil.)
.split(",") coupe la ligne a chaque virgule et donne une liste de champs. Le premier champ est champs[0], le deuxieme champs[1], et ainsi de suite.
Le réflexe : une ligne = un tour de boucle. Un champ seul va dans une variable ; la ligne entière dans un tableau ; et pour retrouver une valeur par son nom (l'espèce → sa hauteur), un dictionnaire.
Une liste dont chaque case est un dictionnaire : une ligne du fichier = une fiche {cle: valeur}. On lit ensuite arbres[0]["hauteur"] pour la hauteur du premier arbre. C'est le format le plus pratique pour analyser un tableau de donnees.
À chaque tour de boucle, la variable est écrasée par la ligne suivante. Si tu ne ranges la valeur nulle part ailleurs, à la fin il ne reste que la dernière ligne - tout le reste est perdu !
La liste se cree avant la boucle (vide), puis .append(...) y ajoute une valeur a chaque tour : c'est ainsi qu'on garde toutes les donnees pour les analyser ensuite.
print... dans un fichier ?print → à l'écran.write() → dans un fichierJusqu'ici on lisait des fichiers ; maintenant on va en créer. Écrire dans un fichier, c'est presque un print : le même texte, mais au lieu de filer à l'écran (et de disparaître), il est rangé dans un fichier qu'on garde, qu'on rouvre, qu'on partage ou qu'on dépose dans un Drive. Le geste : ouvrir en mode "w" (write), puis .write(...).
write, et voilà l'entête dans le fichierwrite()Chaque fichier.write(...) dépose une ligne ; le \n à la fin passe à la ligne suivante. Les deux barres de = et le titre se retrouvent exactement tels quels dans rapport.txt - le fichier garde à la lettre ce qu'on lui a écrit. Sans \n, tout serait collé sur une seule ligne.
write() n'est pas magique comme print()write()print(...) est magique : il accepte plusieurs morceaux séparés par des virgules, met les espaces, transforme les nombres en texte et saute la ligne tout seul. write(...), lui, est basique : il veut une seule chaîne de texte, rien d'autre. Des virgules → TypeError. Un nombre brut comme round(moyenneHauteur, 2) → erreur aussi (c'est un nombre, pas du texte). Et pas de \n automatique : à toi de le mettre. Deux façons de s'en sortir →
print magique, viser le fichierprint, avec file=fichier, file=fichier à la fin de chaque printLe truc le plus simple : on garde le print magique, on lui dit juste où aller avec file=fichier. Tout le confort de print (virgules, espaces, nombres, \n automatique) part directement dans le fichier au lieu de l'écran. Le geste à retenir : print(..., file=fichier).
f"...{variable}..." glisse les nombres dans le texte\n nous-mêmes au bout de chaque lignerapport est une seule grande chaîne → write() est contentIci on fabrique d'abord toute la phrase dans une variable rapport, en collant les morceaux avec += et des f-strings (f"...{nombre}..." insère la valeur dans le texte). Quand rapport est prêt, c'est une seule chaîne : on peut l'print à l'écran et la write dans le fichier - exactement le même contenu. C'est ce que la majorité a fait. (La slide suivante montre une variante avec "\n".join(...).)
print(..., file=fichier)write planteprint sans file=writewrite(rapport) à la fin\n soi-mêmeLes deux produisent exactement le même fichier. Choisis selon le besoin : débloquer vite un code déjà plein de print → ajoute file=fichier (Solution 1). Afficher à l'écran ET sauvegarder le même rapport sans tout écrire en double → concatène une fois, puis print + write (Solution 2). Le piège à ne jamais oublier : write() veut une seule chaîne de texte.
rapport-foret.txtMême recette que la lecture, à l'envers : on ouvre en mode "w", puis .write(...) dépose le texte dans le fichier. L'astuce : on accumule les lignes dans une liste, on les colle avec "\n".join(...), puis on écrit le tout d'un coup. C'est exactement l'entête du rapport du Projet 2 : le même rapport est affiché à l'écran ET sauvegardé pour Maya. ⚠ Le mode "w" écrase le fichier existant.
La bibliotheque csv fait le decoupage proprement - meme quand un champ contient une virgule ou des guillemets. On importe une bibliotheque pour ne pas reinventer la roue.
.write()csv.writerPour créer un fichier, on l'ouvre en mode "w" (write). .write() écrit du texte brut - à toi de placer les virgules et le \n (retour de ligne). csv.writer le fait proprement : writerow transforme une liste en ligne CSV. ⚠ Le mode "w" écrase le fichier existant - utilise "a" pour ajouter à la suite.
Quand les données sont déjà en grille, pandas lit et écrit un CSV en une seule ligne. read_csv charge tout dans un tableau (DataFrame) ; to_csv le réenregistre. index=False évite d'ajouter une colonne de numéros.
read_excelLe format tableur .xlsx (Excel, LibreOffice) se lit et s'écrit exactement comme un CSV avec pandas : read_excel et to_excel. Dans Colab, tout est déjà installé - aucun pip nécessaire.
Bonus : un .xlsx peut contenir plusieurs feuilles - on en choisit une avec sheet_name="Feuille1".
open ne sait lire que les fichiers sur ton disque. Pour un fichier sur le web, il faut un outil qui parle au reseau : urlopen garde la meme forme with ... as, mais ouvre une connexion au lieu d'un fichier. Raccourci : open = disque, urlopen = reseau.
Bonus (vu au jour des tableaux) : numpy et pandas savent lire une adresse directement, ex. pandas.read_csv(adresse) accepte une URL comme un chemin local.
with : le fichier se referme seul.strip() pour nettoyer les fins de lignenext(fichier)int(...) ou float(...) - le fichier ne contient que du texteUn fichier CSV ne contient que des chaines de caracteres. Pour faire des calculs, on doit convertir les valeurs numeriques apres la lecture.
Cree un fichier foret.csv et lis-le dans ton calepin - lis chaque ligne, decoupe les colonnes, affiche les valeurs.