Python >> Tutoriel Python >  >> Python

Comment lire les fichiers CSV Python

Avez-vous rencontré des fichiers CSV ? Dans cet article, je vais vous montrer ce que sont les fichiers CSV et à quel point il est facile de les utiliser en Python.

Si vous travaillez en tant que développeur back-end ou data scientist, il est probable que vous ayez déjà traité des fichiers CSV. C'est l'un des formats les plus utilisés pour travailler et transférer des données. De nombreuses bibliothèques Python peuvent gérer les CSV, mais dans cet article, nous nous concentrerons sur le csv de Python. module.

Que sont les fichiers CSV ?

Un fichier CSV, également appelé fichier de valeurs séparées par des virgules, est un fichier texte qui contient des enregistrements de données. Chaque ligne représente un enregistrement différent et comprend un ou plusieurs champs. Ces champs représentent différentes valeurs de données.

Regardons quelques exemples CSV. Ci-dessous, nous avons un extrait d'un fichier CSV contenant les données des étudiants :

firstname,lastname,class
Benjamin,Berman,2020
Sophie,Case,2018

La première ligne est l'en-tête, qui est essentiellement des noms de colonnes. Chaque ligne aura le même nombre de champs que la première ligne a des noms de colonnes. Nous utilisons des virgules comme délimiteurs (c'est-à-dire pour séparer les champs sur une ligne).

Prenons un deuxième exemple :

firstname|lastname|class
Benjamin|Berman|2020
Sophie|Case|2018

Cet extrait a la même structure que le premier. La différence est le délimiteur :nous utilisons une barre verticale. Tant que nous connaissons la structure générale du fichier CSV, nous pouvons nous en occuper.

Pourquoi les fichiers CSV sont-ils si courants ?

Essentiellement, les fichiers CSV sont des fichiers en texte brut, ce qui signifie qu'ils sont aussi simples que possible. Cette simplicité facilite leur création, leur modification et leur transfert, quelle que soit la plate-forme. Ainsi, les données tabulaires (c'est-à-dire les données structurées en lignes, où chaque ligne décrit un élément) peuvent être déplacées entre des programmes ou des systèmes qui, autrement, pourraient être incompatibles.

Un autre avantage de cette simplicité est qu'il est très facile d'importer ces données dans des feuilles de calcul et des bases de données. Pour les feuilles de calcul, le simple fait d'ouvrir le fichier CSV importe souvent automatiquement les données dans le tableur.

L'une des utilisations les plus courantes des fichiers CSV est lorsqu'une partie des données d'une base de données doit être extraite pour être utilisée par un collègue non technique. La plupart des systèmes de bases de données modernes permettent aux utilisateurs d'exporter leurs données dans des fichiers CSV. Au lieu d'obliger les personnes non techniques à parcourir le système de base de données, nous pouvons facilement leur fournir un fichier CSV contenant les données dont ils ont besoin. Nous pourrions également facilement extraire un fichier CSV d'une feuille de calcul et l'insérer dans notre base de données. Cela facilite grandement l'interface entre le personnel non technique et les bases de données.

Parfois, nous pouvons travailler sur des fichiers CSV réels - par ex. lorsqu'une équipe récupère des données et les transmet à l'équipe qui est censée les utiliser. Le moyen le plus courant de fournir les données serait dans un fichier CSV. Ou peut-être avons-nous besoin d'obtenir des données d'un système hérité avec lequel nous ne pouvons pas nous connecter. La solution la plus simple consiste à acquérir ces données au format CSV, car les données textuelles sont plus faciles à déplacer d'un système à l'autre.

La lecture de fichiers CSV est si courante que des questions à ce sujet apparaissent fréquemment dans les entretiens techniques Python. Vous pouvez en savoir plus sur les questions auxquelles vous pourriez être confronté lors d'un entretien d'embauche en science des données axé sur Python dans cet article. Même si vous n'êtes pas intéressé par un rôle en science des données, jetez-y un coup d'œil ; vous pourriez rencontrer certaines de ces questions dans d'autres tâches Python.

Utilisation du module csv de Python

Il existe de nombreux modules Python qui peuvent lire un fichier CSV, mais il peut y avoir des cas où nous ne sommes pas en mesure d'utiliser ces bibliothèques, c'est-à-dire en raison des limitations de la plate-forme ou de l'environnement de développement. Pour cette raison, nous nous concentrerons sur le module csv intégré de Python. Ci-dessous, nous avons un CSV fichier contenant les notes de deux élèves :

Name,Class,Lecture,Grade
Benjamin,A,Mathematics,90
Benjamin,A,Chemistry,54
Benjamin,A,Physics,77
Sophie,B,Mathematics,90
Sophie,B,Chemistry,90
Sophie,B,Physics,90

Ce fichier comprend six enregistrements. Chaque enregistrement contient un nom, une classe, un cours et une note. Chaque champ est séparé par des virgules. Pour travailler avec ce fichier, nous utiliserons le csv.reader() fonction, qui accepte un objet itérable. Dans ce cas, nous lui fournirons un objet fichier. Voici le code pour imprimer toutes les lignes du fichier Report.csv :

import csv
with open("Report.csv", "r") as handler:
 reader = csv.reader(handler, delimiter=',')
 for row in reader:
   print(row)

Analysons ce code ligne par ligne. Tout d'abord, nous importons le module CSV fourni avec l'installation standard de Python. Ensuite, nous ouvrons le fichier CSV et créons un gestionnaire de fichiers appelé handler . Étant donné que ce gestionnaire de fichiers est un objet itérable qui renvoie une chaîne chaque fois que le __next__ méthode est appelée dessus, nous pouvons la donner en argument dans le reader() fonction et obtenir un gestionnaire CSV que nous appelons reader . Et maintenant, nous pouvons parcourir le lecteur ; chaque élément sera une liste de champs pour chaque ligne de notre fichier CSV d'origine.

Gardez à l'esprit que le fichier CSV peut inclure des noms de champs sur sa première ligne. Si nous savons que c'est le cas, nous pouvons utiliser le csv.DictReader() fonction pour créer un gestionnaire. Au lieu de renvoyer une liste pour chaque ligne, cette fonction renverra un dictionnaire pour chaque ligne. La clé de chaque dictionnaire correspond aux noms figurant sur la première ligne du fichier CSV.

Dialectes CSV et comment les gérer

Même si CSV signifie "valeurs séparées par des virgules", il n'y a pas de norme établie pour ces fichiers. Ainsi, csv nous permet de spécifier le dialecte CSV. Le csv.list_dialects() la fonction liste les csv dialectes intégrés du module. Pour moi, ce sont excel , excel-tab , et unix .

Le excel dialecte est le paramètre par défaut pour les fichiers CSV exportés directement depuis Microsoft Excel ; son délimiteur est une virgule. Une variante de ceci est excel-tab , où le délimiteur est une tabulation. Plus d'informations sur ces dialectes peuvent être consultées sur la page Python GitHub.

Si votre entreprise ou votre équipe utilise un CSV de style personnalisé, vous pouvez créer votre propre dialecte CSV et le mettre dans le système en utilisant le register_dialect() fonction. Voir la page Python GitHub pour plus de détails. Un exemple ressemblerait à ceci :

csv.register_dialect('myDialect',delimiter='|',
   skipinitialspace=True,
                    quoting=csv.QUOTE_ALL)

Vous pouvez alors utiliser le nouveau myDialect pour lire un fichier CSV :

import csv
with open("Report.csv","r") as handler:
 reader = csv.reader(handler, dialect="myDialect")

Cela fonctionne un peu comme notre exemple précédent, mais au lieu de fournir un argument pour le délimiteur, nous donnons simplement notre nouveau dialecte comme argument.

Ici, nous déclarons que nous créons un dialecte appelé "myDialect". Ce dialecte utilisera la barre verticale ( | ) comme délimiteur. Cela indique également que nous voulons ignorer les espaces blancs (espaces vides) après les délimiteurs et que toutes les valeurs sont entre guillemets. Il y a quelques paramètres supplémentaires qui peuvent être définis; voir les liens ci-dessus pour plus de détails.

Et si nous ne connaissons pas le dialecte CSV ?

Parfois, nous ne saurons pas quel dialecte contient le fichier CSV. Pour des moments comme celui-ci, nous pouvons utiliser le csv.Sniffer() Fonctionnalité. J'ai trouvé les deux fonctions ci-dessous très utiles :

	header_exists  = csv.Sniffer().has_header(reader)
	sniffed_dialect = csv.Sniffer().sniff(reader)

La première fonction renvoie une valeur booléenne indiquant s'il existe un en-tête. La deuxième fonction renvoie le dialecte trouvé par csv.Sniffer() . Il est toujours avantageux d'utiliser ces fonctions lorsque nous ne connaissons pas la structure du fichier CSV.

Maintenant que vous connaissez les fichiers CSV et Python...

… vous avez besoin de pratiquer! Le format de fichier CSV est l'une des méthodes de transfert de données les plus anciennes et les plus courantes. Nous ne pouvons tout simplement pas espérer l'éviter lorsque nous travaillons en tant que data scientist ou ingénieur en apprentissage automatique. Même les développeurs back-end traitent des fichiers CSV, soit lors de la réception de données, soit lors de leur réécriture sur le système pour qu'un autre composant les utilise.

Comme le csv module est déjà installé dans Python, ce sera probablement votre outil de prédilection pour traiter les fichiers CSV. Pour une pratique pratique de l'utilisation des CSV en Python, consultez notre cours interactif Comment lire et écrire des fichiers CSV en Python.