Revision sheet: Maîtriser la gestion des tables CSV en Python

📋 Plan du Cours

  1. Importer une table CSV avec csv.DictReader
  2. Interroger une table avec expressions booléennes
  3. Vérifier la cohérence avec contraintes d’intégrité
  4. Détecter et éliminer les doublons de lignes
  5. Trier une table avec sort et clé de tri
  6. Exercices sur le tri et l’accès aux éléments
  7. Lire un CSV avec csv.reader et delimiter
  8. Transformer une liste en dictionnaires structurés
  9. Modifier un dictionnaire et accéder aux valeurs
  10. Fusionner et partitionner des dictionnaires

📖 1. Importer une table CSV avec csv.DictReader

🔑 Notions clés & Définitions

  • csv.DictReader : Outil du module csv qui lit un fichier CSV et transforme chaque ligne en dictionnaire dont les clés sont les en-têtes du fichier.
  • En-tête de colonnes : Première ligne du CSV qui fournit les noms des colonnes utilisés comme clés dans les dictionnaires produits par csv.DictReader.
  • Table de dictionnaires : Structure de données Python qui regroupe plusieurs dictionnaires, chaque dictionnaire représentant une ligne du CSV.
  • Conversion de types : Étape qui transforme des valeurs lues comme chaînes en types adaptés, par exemple en entiers pour des champs numériques.

📝 Points essentiels

  • Le CSV est lu ligne par ligne via csv.DictReader, ce qui produit un dictionnaire par ligne.
  • Les noms de colonnes proviennent de la première ligne du fichier CSV.
  • Dans l’exemple, chaque ligne est convertie en dictionnaire puis ajoutée à une liste table_clients.
  • Les champs numériques (comme idc et age) sont convertis avec int(ligne['...']).
  • Le code montre l’ouverture du fichier en mode lecture avec with open('clients.csv','r') as f.
  • Une ligne peut être modifiée avant insertion dans la table (ajout ou remplacement de champs).

💡 Astuce mémo

DictReader = en-têtes → clés, ligne → dictionnaire.

📖 2. Interroger une table avec expressions booléennes

🔑 Notions clés & Définitions

  • Expression booléenne : Condition qui s’évalue à True ou False et sert à sélectionner des lignes correspondant à une requête.
  • Sélection de lignes : Construction d’une nouvelle table à partir des lignes dont la condition booléenne est vraie.
  • Jointure : Mécanisme de rapprochement de deux tables en reliant des lignes selon une condition, produisant une table de résultats.
  • Parcours de table : Itération sur les éléments d’une table (liste de dictionnaires) pour tester une condition et construire un résultat.

📝 Points essentiels

  • L’interrogation utilise une expression booléenne pour décider si une ligne est retenue.
  • Le résultat est une nouvelle table (liste) construite au fil des correspondances.
  • Dans l’exemple, la correspondance se fait sur deux critères : hobby/activite et ville.
  • La fonction affectation_client_sejour crée une liste affectation et y ajoute des clients ayant au moins un séjour.
  • Le test 'if client['hobby']==sejour['activite'] and sejour['ville']==ville' filtre les séjours pertinents.
  • L’ajout dans la table de sortie dépend de la présence d’un champ ids dans le dictionnaire client_sejour.

💡 Astuce mémo

Booléen = filtre; jointure = “match” entre deux tables.

📖 3. Vérifier la cohérence avec contraintes d’intégrité

🔑 Notions clés & Définitions

  • Contrainte d’intégrité : Règle définie par le développeur qui impose que les valeurs d’une table respectent un contexte d’utilisation.
  • Cohérence de table : Propriété selon laquelle les valeurs des lignes sont compatibles avec les règles imposées par les contraintes d’intégrité.
  • Vérification par fonction : Approche où une fonction teste une condition sur un dictionnaire (une ligne) et signale un problème.
  • Exception : Mécanisme Python permettant d’interrompre le traitement et de signaler explicitement une erreur via raise.

📝 Points essentiels

  • Une table est dite cohérente quand ses lignes respectent les contraintes d’intégrité définies.
  • Une contrainte peut être exprimée comme une condition sur un champ d’une ligne (ex. age).
  • La vérification peut soit retourner un indicateur (True dans l’exemple), soit lever une exception.
  • Dans la version avec exception, un âge négatif déclenche raise Exception avec un message KO.
  • Le traitement d’importation utilise try/except pour gérer ValueError et les exceptions levées.
  • Le code montre aussi un contrôle de doublons via 'if ligne not in table_clients' avant insertion.

💡 Astuce mémo

Cohérence = contraintes; KO = exception (raise) ou signal.

📖 4. Détecter et éliminer les doublons de lignes

🔑 Notions clés & Définitions

  • Doublon de lignes : Deux lignes sont considérées doublons si toutes leurs valeurs sont identiques pour chaque nom de colonne.
  • Comparaison de lignes : Test d’égalité entre deux dictionnaires représentant des lignes pour décider s’il faut ajouter ou ignorer une ligne.
  • Élimination des doublons : Action de ne conserver qu’une seule occurrence d’une ligne identique afin d’éviter des traitements inutiles.

📝 Points essentiels

  • Un doublon est défini comme une paire de lignes ayant des valeurs égales pour chaque nom de colonne.
  • Le coût des doublons est jugé inutile et coûteux, donc ils doivent être éliminés.
  • L’exemple utilise une condition 'if ligne not in table_clients' pour éviter l’ajout.
  • Quand la ligne n’est pas déjà présente, elle est ajoutée à la liste table_clients.
  • Le code affiche 'OK => ' suivi de la ligne lorsqu’elle est acceptée.
  • Le contrôle de doublons s’effectue après conversion et vérifications (int et contraintes) dans l’exemple.

💡 Astuce mémo

Doublon = même dictionnaire (mêmes valeurs par colonnes) → on n’ajoute pas.

📖 5. Trier une table avec sort et clé de tri

🔑 Notions clés & Définitions

  • sort : Méthode Python qui trie une liste sur place en réordonnant ses éléments selon un critère.
  • Clé de tri : Fonction qui extrait la valeur utilisée pour comparer les éléments pendant le tri.
  • Argument nommé key : Paramètre de sort qui indique quelle fonction produire pour obtenir la clé de comparaison de chaque élément.
  • Ordre décroissant : Option de tri qui inverse le sens du classement quand reverse=True est utilisé.

📝 Points essentiels

  • Le tri se fait avec la méthode sort native de Python.
  • Le tri est dit “sur place” : la liste originale est modifiée.
  • Une clé de tri est fournie via key=cle_de_tri.
  • Dans l’exemple, cle_de_tri renvoie la valeur l['a'] pour chaque dictionnaire.
  • L’argument nommé key est présenté comme la forme spéciale utilisée par sort.
  • reverse=True permet de trier dans l’ordre décroissant.

💡 Astuce mémo

sort(key=...) : on trie par la “clé” extraite.

📖 6. Exercices sur le tri et l’accès aux éléments

🔑 Notions clés & Définitions

  • Accès par indice : Accès à un élément d’une liste via sa position, par exemple voyages[0] ou t[i].
  • Accès par clé de dictionnaire : Accès à une valeur d’un dictionnaire via une clé, par exemple voyages[i]['dest'].
  • Parcours par indice : Boucle qui parcourt une liste en utilisant un compteur i et la longueur de la liste.
  • Parcours par élément : Boucle qui parcourt directement les éléments d’une liste sans utiliser d’indice explicite.

📝 Points essentiels

  • Dans l’exercice Voyages, la destination de Rita correspond à l’élément dont le nom vaut 'Rita'.
  • Les expressions booléennes peuvent être construites avec des comparaisons entre valeurs de dictionnaires.
  • Un programme de tri peut ensuite chercher des éléments en testant une condition sur t[i]['nom'].
  • L’exercice montre un tri par prénoms via une fonction cle(d) qui renvoie d['prenom'].
  • Après tri, l’exercice affiche les indices i des personnes dont t[i]['nom']=='Durand'.
  • La consigne de réécriture demande de remplacer un parcours par indice par un parcours direct des éléments.

💡 Astuce mémo

Indice = position; clé = champ : liste[i]['champ'].

📖 7. Lire un CSV avec csv.reader et delimiter

🔑 Notions clés & Définitions

  • csv.reader : Lecteur CSV qui renvoie chaque ligne sous forme de liste de champs, sans utiliser d’en-têtes comme clés.
  • delimiter : Séparateur de champs utilisé par csv.reader pour découper chaque ligne (ex. ';').
  • Liste de lignes : Structure où chaque ligne lue est stockée comme une liste de valeurs.
  • Conversion en dictionnaires : Transformation d’une structure de listes en dictionnaires structurés avec des noms de champs et des types adaptés.

📝 Points essentiels

  • Le code ouvre un fichier CSV en lecture puis crée un lecteur avec csv.reader.
  • Le séparateur est précisé via delimiter=';'.
  • Chaque ligne lue est ajoutée à info_films, donc info_films est une liste.
  • Le contenu de info_films[0] est une liste de valeurs correspondant aux colonnes du CSV.
  • Les valeurs lues sont des chaînes par défaut, sauf indication de conversion ultérieure.
  • L’accès à une valeur structurée devient possible après transformation en dictionnaires (ex. info_films[1]['annee']).

💡 Astuce mémo

csv.reader = ligne → liste; delimiter = séparateur.

📖 8. Transformer une liste en dictionnaires structurés

🔑 Notions clés & Définitions

  • Dictionnaire structuré : Dictionnaire où chaque clé correspond à un champ (id, titre, annee, etc.) et chaque valeur à la donnée de la ligne.
  • Mapping colonnes : Association entre les positions dans la ligne (liste) et les noms de champs utilisés comme clés du dictionnaire final.
  • Conversion booléenne : Transformation des indicateurs numériques du CSV (0/1) en booléens True/False pour les champs de genres.
  • Conversion de types numériques : Transformation des champs numériques (comme id, annee, longueur) depuis des chaînes vers des entiers.

📝 Points essentiels

  • L’objectif est de passer d’une liste de listes (info_films) à une liste de dictionnaires.
  • Le dictionnaire final doit contenir des clés nommées : id, titre, annee, longueur et des genres.
  • Les champs de genres sont convertis en booléens à partir des valeurs 0/1 du CSV.
  • L’exemple cible action, animation, comedie, drame, documentaire, romance, science-fiction, fantastique.
  • L’accès à une valeur se fait ensuite par clé, par exemple info_films[1]['annee'] pour obtenir 1996.
  • La transformation doit aussi convertir id et annee en nombres (dans l’exemple, annee devient 1953 puis 1996).

💡 Astuce mémo

Liste → dictionnaire : positions → noms de champs; 0/1 → True/False.

📖 9. Modifier un dictionnaire et accéder aux valeurs

🔑 Notions clés & Définitions

  • Clé : Identifiant d’un champ dans un dictionnaire, utilisé pour accéder ou modifier une valeur.
  • Valeur : Donnée associée à une clé dans un dictionnaire.
  • Modification par affectation : Mise à jour d’une valeur en réaffectant mydict[clé] à une nouvelle valeur.
  • Accès aux valeurs : Lecture d’une valeur via la syntaxe mydict[clé].

📝 Points essentiels

  • Dans l’exemple, 'device', 'constructeur', 'ram' sont des clés du dictionnaire mydict.
  • 'laptop' et 'acer' sont des valeurs associées respectivement à leurs clés.
  • Pour corriger une erreur, on modifie directement la valeur : mydict['stockage'] = '750 G'.
  • La liste des clés peut être obtenue en parcourant les clés du dictionnaire (exercice).
  • La liste des valeurs peut être obtenue en parcourant les valeurs du dictionnaire (exercice).
  • L’ajout d’une paire clé-valeur se fait en affectant une nouvelle clé : mydict['Système d'exploitation'] = 'Windows 10'.

💡 Astuce mémo

mydict[clé] : lire ou écrire la valeur.

📖 10. Fusionner et partitionner des dictionnaires

🔑 Notions clés & Définitions

  • Fusion de dictionnaires : Construction d’un dictionnaire unique à partir de plusieurs dictionnaires contenant des paires clé-valeur.
  • Partition d’un dictionnaire : Découpage d’un dictionnaire en deux dictionnaires selon une condition sur les valeurs.
  • Fonction dic_fusion : Fonction à écrire qui regroupe trois dictionnaires en un seul dictionnaire.
  • Fonction admission : Fonction à écrire qui renvoie deux dictionnaires séparés selon un seuil de moyenne (admis vs non admis).

📝 Points essentiels

  • L’exercice Fusion demande une fonction dic_fusion(d1,d2,d3) qui regroupe trois dictionnaires en un seul.
  • L’appel de dic_fusion doit utiliser les trois dictionnaires dicPC, dicPhone et dicTablette de l’énoncé.
  • L’exercice Séparation demande une fonction admission(dico) qui renvoie deux dictionnaires.
  • La partition utilise la condition moyenne >= 10 pour les admis et moyenne <= 10 pour les non admis.
  • Les clés des sous-dictionnaires sont les noms des étudiants, et les valeurs sont leurs moyennes.
  • Les deux dictionnaires à renvoyer sont etudiantAdmis et etudiantNonAdmis.

💡 Astuce mémo

Fusion = tout ensemble; partition = deux sorties selon un seuil.

📊 Tableaux de synthèse

Tri : sens et critère

ParamètreEffetExemple
keyDéfinit la valeur utilisée pour comparerkey=cle_de_tri
reverseInverse l’ordre du trireverse=True

⚠️ Pièges & confusions fréquents

  1. Avec csv.DictReader, les valeurs sont lues comme chaînes : oublier int(...) peut casser les comparaisons numériques.
  2. Confondre jointure et simple filtre : dans l’exemple, la sélection dépend de deux tables (clients et séjours).
  3. Pour les doublons, la condition 'ligne not in table_clients' dépend de l’égalité complète du dictionnaire, pas d’un seul champ.
  4. Le tri sort sur place : si tu réutilises la liste originale ailleurs, son ordre a déjà changé.
  5. Dans csv.reader, delimiter doit correspondre au séparateur réel du fichier (sinon les colonnes ne se découpent pas correctement).
  6. Dans la partition admission, la condition donnée recouvre les cas >=10 et <=10, ce qui peut créer une ambiguïté pour la valeur 10 si on ne suit pas exactement l’énoncé.

✅ Checklist Examen

  1. Savoir importer un CSV en liste de dictionnaires avec csv.DictReader et convertir des champs numériques.
  2. Savoir construire une requête avec une expression booléenne pour sélectionner des lignes et produire une nouvelle table.
  3. Savoir définir une contrainte d’intégrité et la vérifier, avec soit un signalement, soit une exception via raise.
  4. Savoir détecter des doublons de lignes en comparant des dictionnaires complets et éviter leur insertion.
  5. Savoir trier une liste de dictionnaires avec sort, en fournissant une clé via key=... et éventuellement reverse=True.
  6. Savoir résoudre des questions de tri et d’accès : trouver un élément par condition, puis accéder à ses champs via indices et clés.
  7. Savoir lire un CSV avec csv.reader en précisant delimiter et stocker les lignes dans une liste.
  8. Savoir transformer une liste de listes en liste de dictionnaires structurés avec conversion 0/1 vers True/False pour les genres.
  9. Savoir modifier un dictionnaire par affectation mydict[clé] et accéder aux valeurs via la même syntaxe.
  10. Savoir écrire dic_fusion(d1,d2,d3) pour regrouper des dictionnaires et admission(dico) pour partitionner selon la moyenne (>=10 vs <=10).

Test your knowledge

Test your knowledge on Maîtriser la gestion des tables CSV en Python with 20 multiple-choice questions with detailed corrections.

1. Quel est le rôle principal de csv.DictReader lors de la lecture d’un fichier CSV ?

2. Pourquoi doit-on souvent appliquer int(...) à certains champs après une lecture avec csv.DictReader ?

Take the quiz →

Review with flashcards

Memorize the key concepts of Maîtriser la gestion des tables CSV en Python with 20 interactive flashcards.

csv.DictReader — rôle ?

Lit un CSV, ligne par ligne, en dicts.

En-tête CSV — rôle ?

Fournit les clés pour les dicts.

Table de dicts — structure ?

Liste de lignes sous forme de dicts.

See flashcards →

Similar courses

Create your own revision sheets

Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.

Sheet generator