Projet 1 — Parser un fichier CSV
Lire un texte brut, nettoyer les données, extraire les champs. Manipulation de split, strip, replace.
Trois mini-projets de difficulté croissante sur des données textuelles réelles.
Projet 1 — Parser un fichier CSV
Lire un texte brut, nettoyer les données, extraire les champs. Manipulation de split, strip, replace.
Projet 2 — Statistiques dyslexie
Analyser un texte et calculer des indicateurs de lisibilité. Itération sur les chaînes, regex, NumPy.
Ton collègue t’a transmis une liste d’étudiants dans un fichier texte. Malheureusement, les données sont sales : séparateurs incohérents, espaces en trop, casse mélangée. Ton travail est de nettoyer le texte et de l’afficher sous forme de tableau.
texte = """prenom ; nom ; age ; notealice ; tremblay ; 19 ; 85.5BOB;Lévesque;20;72Charlie ; NGUYEN ;21 ; 91.0 diana;o'connor ;18; 68.5Eve ;Martin; 22;79"""Écris un programme qui sépare le texte en lignes et affiche chacune d’elles avec son numéro.
Ligne 0 : prenom ; nom ; age ; noteLigne 1 : alice ; tremblay ; 19 ; 85.5Ligne 2 : BOB;Lévesque;20;72Ligne 3 : Charlie ; NGUYEN ;21 ; 91.0Ligne 4 : diana;o'connor ;18; 68.5Ligne 5 : Eve ;Martin; 22;79Écris un programme qui prend une seule ligne de données et la sépare en champs. Attention : le séparateur peut être ; avec ou sans espaces autour.
ligne = "alice ; tremblay ; 19 ; 85.5"['alice', 'tremblay', '19', '85.5']Utilise .split(";") pour séparer, puis .strip() sur chaque champ pour enlever les espaces. Une boucle sur la liste des champs fait l’affaire.
Les prénoms et noms doivent être en Titre (première lettre majuscule, reste en minuscules). Écris une fonction qui normalise un champ texte.
print(normaliser("alice")) # Aliceprint(normaliser("BOB")) # Bobprint(normaliser(" NGUYEN ")) # Nguyenprint(normaliser("o'connor")) # O'ConnorÉcris une fonction parser_ligne(ligne) qui retourne une liste avec les 4 champs correctement typés :
prenom (str, normalisé)nom (str, normalisé)age (int)note (float)# Testresultat = parser_ligne("alice ; tremblay ; 19 ; 85.5")print(resultat)# ['Alice', 'Tremblay', 19, 85.5]Assemble tout : lis le texte, saute la ligne d’en-tête, parse chaque ligne et affiche un tableau propre.
Prénom Nom Âge Note------------------------------------------Alice Tremblay 19 85.5Bob Lévesque 20 72.0Charlie Nguyen 21 91.0Diana O'Connor 18 68.5Eve Martin 22 79.0------------------------------------------Moyenne du groupe : 79.2Pour l’alignement des colonnes, utilise format() avec les spécificateurs de largeur : "{:<12}" aligne à gauche sur 12 caractères, "{:>6}" aligne à droite sur 6 caractères.
La dyslexie rend la lecture plus difficile selon certaines caractéristiques du texte : longueur des mots, fréquence de certaines lettres, présence de lettres facilement confondues (comme b/d, p/q, m/n).
Tu vas écrire un analyseur qui produit des statistiques de lisibilité pour aider à évaluer la difficulté d’un texte.
texte = """Le petit chat noir dort paisiblement sur le canapé beige.Il rêve probablement de poissons dorés nageant dans une rivière.Son ronronnement doux berce la maisonnée tout entière."""Écris une fonction qui compte le nombre total de caractères d’un texte, sans compter les espaces ni les retours à la ligne.
print(compter_caracteres(texte)) # 180Écris une fonction qui retourne le nombre de mots dans le texte. Un mot est délimité par des espaces ou des sauts de ligne.
print(compter_mots(texte)) # 33.split() sans argument découpe sur tous les espaces blancs consécutifs (y compris \n).
Écris une fonction qui retourne la longueur moyenne des mots. Ignore la ponctuation finale (., ,, !, ?).
print(format(longueur_moyenne(texte), ".2f")) # 4.76Retourne la liste des mots de plus de 8 caractères. C’est un indicateur de difficulté : les mots longs sont plus ardus à lire pour les personnes dyslexiques.
print(mots_longs(texte))# ['paisiblement', 'probablement', 'ronronnement', 'maisonnée']Utilise NumPy pour calculer la fréquence de chaque lettre de l’alphabet dans le texte. Retourne un tableau NumPy de 26 valeurs (ordre alphabétique).
Ignore la casse et les accents (traite é comme e).
freq = frequence_lettres(texte)print(freq)# Les 26 fréquencesnp.array(list(texte)).a à z, compte les occurrences avec np.sum(tableau == lettre).Combine les indicateurs précédents en un score de lisibilité simple entre 0 (difficile) et 100 (très facile) :
Où mots_longs est le pourcentage de mots de plus de 8 caractères.
print("Score :", format(score_lisibilite(texte), ".1f"), "/ 100")Écris une fonction analyser(texte) qui affiche un rapport complet.
=== Analyse de lisibilité ===
Nombre de caractères : 180Nombre de mots : 33Longueur moyenne : 4.76
Mots longs (> 8 lettres) : 4 - paisiblement - probablement - ronronnement - maisonnée
Lettres les plus fréquentes : e : 30 n : 17 t : 13 s : 13 o : 12
Score de lisibilité : 62.3 / 100