- À propos de la lecture de certaines colonnes d'un fichier CSV en Python
- Préparer le fichier CSV utilisé dans les exemples
- Lire certaines colonnes avec csv.reader()
- Lire certaines colonnes avec csv.DictReader()
- Sélectionner dynamiquement les colonnes à lire
- Lire une seule colonne d'un fichier CSV
- Filtrer les lignes à partir d'une colonne sélectionnée
- Convertir et traiter les colonnes numériques sélectionnées
- Extraire certaines colonnes vers un nouveau fichier CSV
- À retenir !
1. À propos de la lecture de certaines colonnes d'un fichier CSV en Python
Un fichier CSV peut contenir un grand nombre de colonnes alors qu'un programme n'a besoin que de quelques informations. Il est alors possible de lire seulement certaines colonnes d'un fichier CSV en utilisant le module standard csv de Python.
Il existe principalement deux approches. Avec csv.reader(), les colonnes sont sélectionnées à partir de leurs indices. Avec csv.DictReader(), elles peuvent être sélectionnées directement à partir de leurs noms.
Le programme suivant illustre simplement les deux manières de représenter une même ligne CSV.
1 2 3 4 5 6 7 8 9 10 | ligne_liste = ["Amine", "21", "Oujda", "15.5"] ligne_dict = { "nom": "Amine", "age": "21", "ville": "Oujda", "note": "15.5" } print(ligne_liste[0], ligne_liste[3]) print(ligne_dict["nom"], ligne_dict["note"]) |
Sortie :
1 2 | Amine 15.5 Amine 15.5 |
Dans le premier cas, nous utilisons les positions 0 et 3. Dans le second, nous utilisons directement les noms nom et note. Pour les fichiers possédant une ligne d'en-tête, DictReader() rend généralement le programme plus explicite et plus facile à maintenir.
2. Préparer le fichier CSV utilisé dans les exemples
Considérons un fichier nommé etudiants.csv contenant six colonnes : identifiant, nom, age, ville, note et filiere. Dans la plupart des exemples, nous ne souhaitons récupérer qu'une partie de ces informations.
Le fichier utilisé possède le contenu suivant.
1 2 3 4 5 6 | id,nom,age,ville,note,filiere 1,Amine,21,Oujda,15.5,Mathématiques 2,Sara,20,Rabat,17,Informatique 3,Yassine,22,Fès,13.5,Physique 4,Lina,19,Casablanca,18,Informatique 5,Omar,21,Agadir,14,Mathématiques |
Sortie :
1 | Le fichier contient 6 colonnes et 5 lignes de données. |
Nous pouvons afficher le contenu du fichier avant de sélectionner les colonnes qui nous intéressent.
1 2 | with open("etudiants.csv", "r", encoding="utf-8") as fichier: print(fichier.read()) |
Sortie :
1 2 3 4 5 6 | id,nom,age,ville,note,filiere 1,Amine,21,Oujda,15.5,Mathématiques 2,Sara,20,Rabat,17,Informatique 3,Yassine,22,Fès,13.5,Physique 4,Lina,19,Casablanca,18,Informatique 5,Omar,21,Agadir,14,Mathématiques |
Dans les sections suivantes, nous allons par exemple extraire uniquement les colonnes nom, ville et note.
3. Lire certaines colonnes avec csv.reader()
La fonction csv.reader() retourne chaque ligne sous forme de liste. Pour sélectionner certaines colonnes, nous utilisons donc leurs indices. Les indices commencent à 0.
Dans notre fichier, nom correspond à l'indice 1, ville à l'indice 3 et note à l'indice 4. Le programme suivant affiche uniquement ces trois colonnes.
1 2 3 4 5 6 7 8 9 10 11 12 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.reader(fichier) next(lecteur, None) for ligne in lecteur: nom = ligne[1] ville = ligne[3] note = ligne[4] print(nom, "-", ville, "-", note) |
Sortie :
1 2 3 4 5 | Amine - Oujda - 15.5 Sara - Rabat - 17 Yassine - Fès - 13.5 Lina - Casablanca - 18 Omar - Agadir - 14 |
La fonction next() permet ici d'ignorer la première ligne contenant l'en-tête. Cette technique est simple, mais elle dépend de la position exacte des colonnes dans le fichier.
Nous pouvons également récupérer plusieurs colonnes directement dans une nouvelle liste.
1 2 3 4 5 6 7 8 9 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.reader(fichier) next(lecteur, None) for ligne in lecteur: selection = [ligne[1], ligne[3], ligne[4]] print(selection) |
Sortie :
1 2 3 4 5 | ['Amine', 'Oujda', '15.5'] ['Sara', 'Rabat', '17'] ['Yassine', 'Fès', '13.5'] ['Lina', 'Casablanca', '18'] ['Omar', 'Agadir', '14'] |
4. Lire certaines colonnes avec csv.DictReader()
La classe csv.DictReader() est particulièrement pratique lorsque le fichier possède une ligne d'en-tête. Chaque ligne est représentée par un dictionnaire et les noms des colonnes deviennent les clés de ce dictionnaire.
Pour récupérer uniquement le nom, la ville et la note, il suffit d'utiliser les clés correspondantes.
1 2 3 4 5 6 7 8 9 10 11 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: nom = ligne["nom"] ville = ligne["ville"] note = ligne["note"] print(nom, "-", ville, "-", note) |
Sortie :
1 2 3 4 5 | Amine - Oujda - 15.5 Sara - Rabat - 17 Yassine - Fès - 13.5 Lina - Casablanca - 18 Omar - Agadir - 14 |
Cette méthode est généralement plus lisible que l'utilisation d'indices numériques. Une expression comme ligne["ville"] indique clairement la donnée manipulée.
Nous pouvons également créer pour chaque ligne un nouveau dictionnaire ne contenant que les colonnes souhaitées.
1 2 3 4 5 6 7 8 9 10 11 12 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: selection = { "nom": ligne["nom"], "note": ligne["note"] } print(selection) |
Sortie :
1 2 3 4 5 | {'nom': 'Amine', 'note': '15.5'} {'nom': 'Sara', 'note': '17'} {'nom': 'Yassine', 'note': '13.5'} {'nom': 'Lina', 'note': '18'} {'nom': 'Omar', 'note': '14'} |
Cette représentation devient très pratique si les données sélectionnées doivent ensuite être filtrées, transformées ou enregistrées dans un autre fichier.
5. Sélectionner dynamiquement les colonnes à lire
Au lieu d'écrire explicitement chaque nom de colonne dans le programme, nous pouvons placer les colonnes souhaitées dans une liste. Cette technique permet de rendre le traitement plus générique et plus facile à modifier.
Dans l'exemple suivant, la liste colonnes contient les trois champs que nous souhaitons récupérer.
1 2 3 4 5 6 7 8 9 10 | import csv colonnes = ["nom", "ville", "note"] with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: valeurs = [ligne[colonne] for colonne in colonnes] print(valeurs) |
Sortie :
1 2 3 4 5 | ['Amine', 'Oujda', '15.5'] ['Sara', 'Rabat', '17'] ['Yassine', 'Fès', '13.5'] ['Lina', 'Casablanca', '18'] ['Omar', 'Agadir', '14'] |
Pour sélectionner d'autres colonnes, il suffit maintenant de modifier la liste colonnes sans changer la boucle de lecture.
Nous pouvons aussi créer automatiquement un dictionnaire contenant uniquement les champs sélectionnés.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import csv colonnes = ["nom", "filiere"] with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: selection = { colonne: ligne[colonne] for colonne in colonnes } print(selection) |
Sortie :
1 2 3 4 5 | {'nom': 'Amine', 'filiere': 'Mathématiques'} {'nom': 'Sara', 'filiere': 'Informatique'} {'nom': 'Yassine', 'filiere': 'Physique'} {'nom': 'Lina', 'filiere': 'Informatique'} {'nom': 'Omar', 'filiere': 'Mathématiques'} |
Cette approche est utile lorsque les colonnes à extraire sont déterminées par une configuration, un choix utilisateur ou une autre partie du programme.
6. Lire une seule colonne d'un fichier CSV
Il est parfois nécessaire d'extraire une seule colonne. Avec DictReader(), il suffit d'accéder à la clé correspondant à cette colonne.
Le programme suivant lit uniquement la colonne nom.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: print(ligne["nom"]) |
Sortie :
1 2 3 4 5 | Amine Sara Yassine Lina Omar |
Nous pouvons également stocker toute une colonne dans une liste Python. L'exemple suivant récupère uniquement les villes.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) villes = [ligne["ville"] for ligne in lecteur] print(villes) |
Sortie :
1 | ['Oujda', 'Rabat', 'Fès', 'Casablanca', 'Agadir'] |
Si nous souhaitons récupérer les valeurs distinctes d'une colonne, nous pouvons utiliser un ensemble Python.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) filieres = {ligne["filiere"] for ligne in lecteur} print(sorted(filieres)) |
Sortie :
1 | ['Informatique', 'Mathématiques', 'Physique'] |
7. Filtrer les lignes à partir d'une colonne sélectionnée
La sélection des colonnes peut être combinée avec un filtrage des lignes. Nous pouvons par exemple utiliser la colonne note pour sélectionner certains étudiants tout en n'affichant que leur nom et leur ville.
Le programme suivant affiche le nom et la ville des étudiants ayant une note supérieure ou égale à 15.
1 2 3 4 5 6 7 8 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: if float(ligne["note"]) >= 15: print(ligne["nom"], "-", ligne["ville"]) |
Sortie :
1 2 3 | Amine - Oujda Sara - Rabat Lina - Casablanca |
La colonne note est utilisée pour effectuer le test, mais elle n'est pas obligatoirement affichée dans le résultat. Une colonne peut donc servir uniquement de critère de filtrage.
Nous pouvons de la même manière sélectionner les étudiants appartenant à une filière particulière et afficher seulement certaines colonnes.
1 2 3 4 5 6 7 8 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: if ligne["filiere"] == "Informatique": print(ligne["nom"], "-", ligne["note"]) |
Sortie :
1 2 | Sara - 17 Lina - 18 |
Cette combinaison entre sélection de colonnes et filtrage de lignes est très fréquente lors du traitement de fichiers CSV.
8. Convertir et traiter les colonnes numériques sélectionnées
Les valeurs récupérées avec csv.reader() ou csv.DictReader() sont généralement des chaînes de caractères. Une colonne numérique doit donc être convertie avant d'effectuer des calculs.
Le programme suivant sélectionne uniquement les colonnes nom et note, puis convertit la note avec float().
1 2 3 4 5 6 7 8 9 10 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: nom = ligne["nom"] note = float(ligne["note"]) print(nom, "-", note, "-", type(note)) |
Sortie :
1 2 3 4 5 | Amine - 15.5 - <class 'float'> Sara - 17.0 - <class 'float'> Yassine - 13.5 - <class 'float'> Lina - 18.0 - <class 'float'> Omar - 14.0 - <class 'float'> |
Nous pouvons ainsi effectuer des calculs uniquement à partir de la colonne qui nous intéresse. L'exemple suivant calcule la moyenne de la colonne note.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import csv notes = [] with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: notes.append(float(ligne["note"])) moyenne = sum(notes) / len(notes) print("Nombre de notes :", len(notes)) print("Moyenne :", moyenne) |
Sortie :
1 2 | Nombre de notes : 5 Moyenne : 15.6 |
Il n'est donc pas nécessaire de transformer toutes les colonnes du fichier lorsque le calcul ne concerne qu'une partie des données.
9. Extraire certaines colonnes vers un nouveau fichier CSV
Après avoir sélectionné certaines colonnes, nous pouvons les enregistrer dans un nouveau fichier CSV. La combinaison de csv.DictReader() et csv.DictWriter() est particulièrement adaptée à cette opération.
Le programme suivant extrait uniquement les colonnes nom, ville et note du fichier etudiants.csv et les enregistre dans selection.csv.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import csv colonnes = ["nom", "ville", "note"] with open("etudiants.csv", "r", encoding="utf-8", newline="") as source: lecteur = csv.DictReader(source) with open("selection.csv", "w", encoding="utf-8", newline="") as destination: writer = csv.DictWriter( destination, fieldnames=colonnes ) writer.writeheader() for ligne in lecteur: selection = { colonne: ligne[colonne] for colonne in colonnes } writer.writerow(selection) print("Colonnes extraites avec succès.") |
Sortie :
1 | Colonnes extraites avec succès. |
Le nouveau fichier selection.csv contient uniquement les trois colonnes demandées.
1 2 3 4 5 6 | nom,ville,note Amine,Oujda,15.5 Sara,Rabat,17 Yassine,Fès,13.5 Lina,Casablanca,18 Omar,Agadir,14 |
Sortie :
1 | Le nouveau fichier contient 3 colonnes au lieu des 6 colonnes du fichier source. |
Nous pouvons aussi combiner sélection des colonnes et filtrage des lignes. L'exemple suivant exporte uniquement le nom et la note des étudiants ayant une note supérieure ou égale à 15.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import csv colonnes = ["nom", "note"] with open("etudiants.csv", "r", encoding="utf-8", newline="") as source: lecteur = csv.DictReader(source) with open("admis.csv", "w", encoding="utf-8", newline="") as destination: writer = csv.DictWriter( destination, fieldnames=colonnes ) writer.writeheader() for ligne in lecteur: if float(ligne["note"]) >= 15: writer.writerow({ "nom": ligne["nom"], "note": ligne["note"] }) print("Extraction terminée.") |
Sortie :
1 | Extraction terminée. |
Le fichier admis.csv obtenu contient uniquement les deux colonnes sélectionnées et les lignes satisfaisant la condition.
1 2 3 4 | nom,note Amine,15.5 Sara,17 Lina,18 |
Sortie :
1 | Trois étudiants ont été sélectionnés et deux colonnes ont été exportées. |
10. À retenir !
Python permet facilement de lire seulement certaines colonnes d'un fichier CSV. Le choix de la méthode dépend principalement de la manière dont nous souhaitons identifier les colonnes.
- csv.reader() retourne chaque ligne sous forme de liste.
- Avec csv.reader(), les colonnes sont généralement sélectionnées à partir de leurs indices.
- csv.DictReader() retourne chaque ligne sous forme de dictionnaire.
- Avec DictReader(), une colonne peut être récupérée directement à partir de son nom.
- L'utilisation des noms de colonnes rend généralement le programme plus lisible que l'utilisation d'indices numériques.
- Une liste comme ["nom", "ville", "note"] permet de sélectionner dynamiquement plusieurs colonnes.
- Une seule colonne peut être extraite et stockée dans une liste ou un ensemble Python.
- Une colonne peut être utilisée comme critère de filtrage sans nécessairement apparaître dans le résultat affiché.
- Les colonnes numériques lues dans un CSV doivent généralement être converties avec int() ou float() avant les calculs.
- La combinaison de DictReader() et DictWriter() permet d'extraire certaines colonnes vers un nouveau fichier CSV.
Le modèle suivant résume une méthode simple et réutilisable pour sélectionner dynamiquement plusieurs colonnes avec DictReader().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import csv colonnes = ["nom", "ville", "note"] with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for ligne in lecteur: selection = { colonne: ligne[colonne] for colonne in colonnes } print(selection) |
Sortie :
1 2 3 4 5 | {'nom': 'Amine', 'ville': 'Oujda', 'note': '15.5'} {'nom': 'Sara', 'ville': 'Rabat', 'note': '17'} {'nom': 'Yassine', 'ville': 'Fès', 'note': '13.5'} {'nom': 'Lina', 'ville': 'Casablanca', 'note': '18'} {'nom': 'Omar', 'ville': 'Agadir', 'note': '14'} |
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


