Lire un fichier CSV avec csv.reader() en Python

Python csv module, lire un fichier csv python

1. À propos de la lecture d'un fichier CSV avec csv.reader()

Le format CSV, pour Comma-Separated Values, est un format texte très utilisé pour stocker et échanger des données organisées sous forme de lignes et de colonnes. Il est notamment utilisé pour exporter des tableaux depuis des logiciels de gestion, des feuilles de calcul, des bases de données ou des applications web.

Python fournit le module standard csv, qui permet de lire et d'écrire des fichiers CSV sans installer de bibliothèque supplémentaire. La fonction csv.reader() crée un lecteur capable de parcourir les lignes du fichier et de retourner chaque ligne sous forme de liste de chaînes de caractères.

Le programme suivant importe le module csv et vérifie qu'il est disponible dans Python.

Sortie :

L'utilisation de csv.reader() est préférable à une séparation manuelle des lignes avec split(), car le module csv sait notamment gérer les délimiteurs, les champs placés entre guillemets et plusieurs particularités du format CSV.

2. Préparer un fichier CSV à lire

Pour apprendre à utiliser csv.reader(), considérons un fichier nommé etudiants.csv. Il contient quatre colonnes : nom, âge, ville et note.

Voici le contenu du fichier etudiants.csv que nous utiliserons dans les premiers exemples.

Sortie :

Nous pouvons vérifier le contenu du fichier directement avec Python avant de le traiter avec le module csv. L'option encoding="utf-8" permet de lire correctement les caractères Unicode tels que le caractère accentué de Fès.

Sortie :

L'instruction with open() ouvre le fichier et garantit sa fermeture à la fin du bloc, même si une erreur survient pendant son traitement.

3. Lire un fichier CSV avec csv.reader()

Pour lire correctement le fichier CSV, nous l'ouvrons puis transmettons l'objet fichier à csv.reader(). Le paramètre newline="" est recommandé lors de l'utilisation du module csv afin de lui laisser gérer correctement les fins de ligne.

Sortie :

Chaque ligne est retournée sous forme d'une liste Python. Les différentes colonnes deviennent les éléments de cette liste.

Nous pouvons vérifier explicitement le type d'une ligne retournée par csv.reader().

Sortie :

Par défaut, csv.reader() utilise la virgule comme délimiteur, ce qui correspond au fichier de notre exemple.

4. Parcourir les lignes et accéder aux colonnes

Puisque chaque ligne retournée par csv.reader() est une liste, nous pouvons accéder aux différentes colonnes avec leurs indices. La première colonne possède l'indice 0, la deuxième l'indice 1, et ainsi de suite.

Le programme suivant affiche uniquement le nom et la ville de chaque ligne du fichier.

Sortie :

Nous remarquons que la première ligne contient les noms des colonnes et qu'elle est traitée comme les autres. Si nous souhaitons travailler uniquement avec les données, nous devons donc ignorer ou récupérer séparément cette ligne d'en-tête.

Nous pouvons également utiliser l'affectation multiple pour rendre le programme plus lisible lorsque le nombre et l'ordre des colonnes sont connus.

Sortie :

Cette technique est pratique lorsque toutes les lignes possèdent exactement le même nombre de colonnes.

5. Séparer l'en-tête des données avec next()

La fonction next() permet de récupérer la prochaine ligne produite par le lecteur. Lorsqu'elle est appelée juste après la création de csv.reader(), elle peut servir à récupérer séparément la première ligne contenant les noms des colonnes.

Sortie :

Après l'appel de next(), le lecteur continue à partir de la deuxième ligne. L'en-tête ne sera donc pas parcouru une seconde fois par la boucle for.

Pour éviter une exception si le fichier est vide, nous pouvons fournir une valeur par défaut à next().

Sortie :

L'utilisation de next(lecteur, None) est particulièrement utile lorsqu'un programme doit traiter des fichiers dont nous ne connaissons pas à l'avance le contenu.

6. Lire un fichier CSV avec un séparateur personnalisé

Tous les fichiers CSV n'utilisent pas nécessairement la virgule. En France et dans de nombreux fichiers produits par des tableurs configurés avec des paramètres régionaux utilisant la virgule décimale, le point-virgule est également très fréquent comme séparateur de colonnes.

Considérons par exemple un fichier nommé produits.csv dont le contenu utilise le point-virgule.

Sortie :

Pour lire correctement ce fichier, nous indiquons le séparateur avec le paramètre delimiter de csv.reader().

Sortie :

Si nous utilisions le délimiteur par défaut sur ce fichier, chaque ligne serait considérée comme un seul champ puisqu'aucune virgule ne sépare les colonnes.

Le module csv sait également gérer les champs contenant eux-mêmes le séparateur lorsqu'ils sont correctement placés entre guillemets. Considérons le contenu suivant.

Sortie :

csv.reader() reconnaît correctement ces guillemets et ne découpe pas les descriptions au niveau de leurs virgules internes.

Sortie :

C'est l'une des raisons importantes pour lesquelles csv.reader() est préférable à un simple découpage manuel avec split(",").

7. Convertir les données CSV dans les bons types Python

Par défaut, les champs lus par csv.reader() sont généralement retournés sous forme de chaînes de caractères. Même si une colonne contient 21 ou 15.5, ces valeurs ne deviennent pas automatiquement un int ou un float.

Le programme suivant permet de vérifier les types obtenus lors de la lecture d'une ligne.

Sortie :

Si nous souhaitons effectuer des calculs, nous devons convertir explicitement les colonnes numériques avec int() ou float().

Sortie :

Une fois les notes converties en nombres, nous pouvons par exemple calculer leur moyenne.

Sortie :

La conversion des données constitue donc une étape essentielle lorsque le fichier CSV doit être utilisé pour réaliser des calculs ou des comparaisons numériques.

8. Filtrer et traiter les données pendant la lecture

La lecture avec csv.reader() peut être combinée avec les structures de contrôle Python. Il est ainsi possible de sélectionner certaines lignes sans charger nécessairement tout le fichier en mémoire.

Le programme suivant affiche uniquement les étudiants dont la note est supérieure ou égale à 15.

Sortie :

Nous pouvons également compter les lignes de données pendant leur lecture. Cette technique évite de transformer obligatoirement tout le lecteur en liste.

Sortie :

Nous pouvons enfin rechercher une information particulière, par exemple tous les étudiants habitant une ville donnée.

Sortie :

csv.reader() est donc particulièrement adapté au traitement séquentiel des fichiers CSV : chaque ligne peut être examinée, convertie, filtrée ou utilisée immédiatement.

9. Gérer l'encodage et les erreurs courantes

La lecture d'un fichier CSV peut échouer si le fichier n'existe pas, si son encodage n'est pas celui attendu ou si certaines lignes ne possèdent pas la structure prévue. Il est donc utile de connaître quelques techniques de diagnostic.

Gérer un fichier CSV introuvable

Si le nom ou le chemin du fichier est incorrect, open() déclenche une exception FileNotFoundError. Nous pouvons la gérer avec try et except.

Sortie possible si le fichier n'existe pas :

Vérifier le nombre de colonnes

Lorsqu'un fichier doit toujours contenir quatre colonnes, nous pouvons vérifier la longueur de chaque ligne avant d'accéder à ses indices. Cela permet d'éviter certaines erreurs liées à des lignes incomplètes.

Sortie :

Gérer l'encodage UTF-8 avec BOM

Certains fichiers CSV provenant notamment de logiciels sous Windows peuvent commencer par un marqueur Unicode BOM. Dans ce cas, encoding="utf-8-sig" peut être pratique pour supprimer automatiquement ce marqueur lors de la lecture.

Sortie possible :

Le choix du bon encoding dépend de l'encodage réel du fichier. UTF-8 est aujourd'hui un choix fréquent, mais il ne faut pas supposer qu'un fichier ancien ou provenant d'un logiciel particulier utilise nécessairement cet encodage.

10. À retenir !

La fonction csv.reader() du module standard csv permet de lire simplement un fichier CSV en Python. Elle transforme chaque ligne du fichier en une liste dont les éléments correspondent aux différents champs.

  • Le module csv appartient à la bibliothèque standard de Python.
  • csv.reader(fichier) crée un lecteur CSV à partir d'un fichier ouvert.
  • Chaque ligne retournée par csv.reader() est généralement une liste de chaînes de caractères.
  • with open() permet de fermer automatiquement le fichier après son utilisation.
  • Le paramètre newline="" est recommandé lors de l'ouverture d'un fichier destiné au module csv.
  • next(lecteur) permet notamment de récupérer ou d'ignorer la première ligne contenant l'en-tête.
  • delimiter=";" permet de lire un fichier dont les champs sont séparés par des points-virgules.
  • Les colonnes numériques doivent être converties avec int() ou float() lorsqu'on souhaite effectuer des calculs.
  • encoding="utf-8" convient à de nombreux fichiers Unicode, tandis que utf-8-sig peut être utile pour certains fichiers comportant un BOM.
  • csv.reader() permet de parcourir progressivement les données et de les afficher, filtrer, convertir ou analyser.

Le modèle suivant résume la méthode courante pour lire un fichier CSV possédant une ligne d'en-tête.

Sortie :

Pour exploiter réellement les colonnes, nous pouvons compléter cette structure par une conversion des valeurs et un traitement adapté aux besoins du programme.

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 *