Rechercher une valeur dans un fichier CSV en Python

1. À propos de la recherche d'une valeur dans un fichier CSV en Python

La recherche d'une valeur dans un fichier CSV est une opération courante lorsqu'un programme doit retrouver un étudiant, un produit, une ville, un identifiant ou toute autre information enregistrée dans un fichier tabulaire.

Le module standard csv de Python permet de parcourir les lignes d'un fichier CSV et de tester les valeurs rencontrées. Nous pouvons utiliser csv.reader() pour travailler avec les positions des colonnes ou csv.DictReader() pour rechercher une valeur à partir du nom d'une colonne.

Le principe général consiste à parcourir les lignes et à comparer la valeur recherchée avec les données du fichier. L'exemple suivant illustre ce principe sur une simple liste Python.

Sortie :

Nous allons appliquer le même principe aux lignes d'un fichier CSV, puis étudier des recherches plus avancées : recherche dans une colonne précise, plusieurs résultats, recherche partielle, recherche insensible à la casse et combinaison de plusieurs critères.

2. Préparer le fichier CSV utilisé pour la recherche

Considérons un fichier nommé etudiants.csv. Il contient les colonnes id, nom, age, ville, note et filiere.

Voici le contenu utilisé dans les exemples de ce tutoriel.

Sortie :

Nous pouvons commencer par afficher le fichier afin de vérifier les données dans lesquelles les recherches seront effectuées.

Sortie :

Dans les sections suivantes, nous rechercherons différentes valeurs dans ce fichier en utilisant csv.reader() puis csv.DictReader().

3. Rechercher une valeur avec csv.reader()

La fonction csv.reader() retourne chaque ligne du fichier sous forme de liste. Nous pouvons donc rechercher une valeur en utilisant l'opérateur in pour vérifier si elle apparaît dans une ligne.

Le programme suivant recherche la valeur "Yassine" dans toutes les lignes du fichier.

Sortie :

L'instruction break arrête immédiatement la boucle après la première correspondance. Cette technique est intéressante lorsque nous souhaitons uniquement savoir si une valeur existe.

Nous pouvons également rechercher dans une colonne particulière en utilisant son indice. Dans notre fichier, le nom se trouve à l'indice 1.

Sortie :

Cette méthode fonctionne correctement, mais elle suppose de connaître la position exacte de la colonne. Pour des fichiers possédant une ligne d'en-tête, DictReader() permet d'utiliser directement les noms des colonnes.

4. Rechercher une valeur dans une colonne précise avec csv.DictReader()

La classe csv.DictReader() représente chaque ligne sous forme de dictionnaire. Nous pouvons donc effectuer une recherche dans une colonne précise avec une expression comme ligne["nom"] ou ligne["ville"].

Le programme suivant recherche l'étudiante nommée Sara dans la colonne nom.

Sortie :

Cette approche est généralement plus lisible, car le programme indique explicitement la colonne dans laquelle la recherche doit être effectuée.

Nous pouvons également rechercher un identifiant et afficher uniquement certaines informations de la ligne trouvée.

Sortie :

Pour rechercher un enregistrement à partir d'un identifiant unique, l'utilisation de break est logique puisque nous n'attendons normalement qu'un seul résultat.

5. Rechercher plusieurs occurrences d'une même valeur

Une valeur peut apparaître plusieurs fois dans une même colonne. Par exemple, plusieurs étudiants peuvent habiter dans la même ville. Dans ce cas, il ne faut pas arrêter la boucle avec break après la première correspondance.

Le programme suivant recherche tous les étudiants habitant à Oujda.

Sortie :

Une autre possibilité consiste à stocker toutes les lignes correspondantes dans une liste. Cette méthode est pratique lorsque les résultats doivent être réutilisés après la fermeture du fichier.

Sortie :

Nous pouvons également utiliser une compréhension de liste lorsque nous souhaitons obtenir directement l'ensemble des résultats.

Sortie :

6. Effectuer une recherche partielle et ignorer la casse

Une comparaison avec l'opérateur == exige une correspondance exacte. Dans certaines applications, nous souhaitons au contraire effectuer une recherche partielle. L'opérateur in peut alors être utilisé sur les chaînes de caractères.

Le programme suivant recherche les noms contenant la chaîne "ar".

Sortie :

Une recherche peut également échouer uniquement à cause des majuscules et des minuscules. Pour rendre la comparaison insensible à la casse, nous pouvons utiliser la méthode casefold().

Sortie :

Pour une recherche partielle insensible à la casse, nous pouvons combiner in et casefold().

Sortie :

La méthode casefold() est particulièrement adaptée aux comparaisons textuelles sans distinction entre majuscules et minuscules.

7. Rechercher avec plusieurs critères

Une recherche peut porter simultanément sur plusieurs colonnes. Les opérateurs logiques and et or permettent de combiner plusieurs conditions.

Le programme suivant recherche les étudiants habitant à Rabat et appartenant à la filière Informatique.

Sortie :

L'opérateur or permet au contraire de retenir une ligne lorsque l'une au moins des conditions est satisfaite. L'exemple suivant recherche les étudiants habitant Oujda ou Fès.

Sortie :

Pour plusieurs valeurs possibles dans une même colonne, l'opérateur in associé à une collection rend souvent le test plus compact.

Sortie :

8. Rechercher des valeurs numériques dans un fichier CSV

Les données récupérées avec csv.DictReader() sont généralement des chaînes de caractères. Pour effectuer une recherche numérique basée sur une comparaison comme >, <, >= ou <=, il faut convertir la valeur avec int() ou float().

Le programme suivant recherche les étudiants dont la note est supérieure ou égale à 16.

Sortie :

Nous pouvons également rechercher les valeurs appartenant à un intervalle numérique. L'exemple suivant sélectionne les étudiants dont la note est comprise entre 14 et 17 inclus.

Sortie :

La même technique peut être appliquée aux âges. Nous convertissons alors la valeur avec int().

Sortie :

Il est important d'effectuer cette conversion avant les comparaisons numériques afin d'éviter de comparer les nombres comme de simples chaînes de caractères.

9. Créer une fonction réutilisable de recherche dans un fichier CSV

Lorsque des recherches doivent être effectuées régulièrement, il est préférable de créer une fonction réutilisable. La fonction suivante reçoit le nom du fichier, la colonne à examiner et la valeur recherchée.

Sortie :

L'intérêt de cette fonction est qu'elle peut rechercher une valeur dans différentes colonnes sans modifier son code interne.

Sortie :

Nous pouvons améliorer la fonction afin d'effectuer une recherche textuelle insensible à la casse. Il est également prudent de vérifier que la colonne demandée existe dans le fichier.

Sortie :

Une fonction de ce type peut servir de base à un programme de consultation de données, à un formulaire de recherche ou à une petite application utilisant des fichiers CSV.

10. À retenir !

La recherche d'une valeur dans un fichier CSV en Python consiste principalement à parcourir les lignes du fichier puis à comparer une ou plusieurs colonnes avec les critères recherchés.

  • csv.reader() permet de rechercher une valeur en travaillant avec les indices des colonnes.
  • csv.DictReader() permet de rechercher directement à partir des noms des colonnes.
  • L'opérateur == permet d'effectuer une recherche exacte.
  • L'opérateur in permet notamment d'effectuer une recherche partielle dans une chaîne.
  • break permet d'arrêter la recherche après la première correspondance.
  • Pour obtenir toutes les correspondances, il faut continuer à parcourir le fichier et éventuellement stocker les résultats dans une liste.
  • La méthode casefold() permet d'effectuer des recherches textuelles sans tenir compte de la casse.
  • Les opérateurs and et or permettent de combiner plusieurs critères.
  • Les valeurs numériques doivent généralement être converties avec int() ou float() avant une comparaison numérique.
  • Une fonction de recherche permet de rendre le programme plus générique et réutilisable.

Le modèle suivant résume une méthode simple permettant de rechercher toutes les lignes correspondant à une valeur dans une colonne donnée.

Sortie :

 




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/


Leave a Reply

Your email address will not be published. Required fields are marked *