Recherche de site Web

Comment lire et créer des fichiers csv à l’aide de Python


CSV est l’acronyme de « Comma Separated Values ». Un fichier csv est un document en texte brut utilisé pour représenter et échanger des données tabulaires. Chaque ligne d’un fichier csv représente une « entité », et chaque colonne représente un attribut de celle-ci. Les colonnes sont généralement séparées par une virgule, mais d’autres caractères peuvent être utilisés comme séparateur de champ à la place. Dans ce tutoriel, nous allons voir comment lire et créer des fichiers csv à l’aide de Python et plus particulièrement du module csv, qui fait partie de la bibliothèque standard du langage
.

Dans ce tutoriel, vous allez apprendre :

  • Comment lire les lignes csv sous forme de liste de chaînes de caractères
  • Comment lire un csv sous forme de liste de dictionnaires
  • Comment créer un csv à l’aide de Python
  • Comment créer un csv à partir d’une liste de dictionnaires

Comment lire et créer des fichiers csv à l’aide de Python

Configuration logicielle requise et conventions utilisées

CSV – Valeur séparée par des virgules

Comme nous l’avons déjà mentionné dans l’introduction de ce tutoriel, un csv n’est qu’un simple fichier texte brut, formaté de manière à nous permettre de représenter et d’échanger des données tabulaires. Chaque ligne d’un fichier csv représente une entité quelconque, à l’exception de la première ligne
qui contient généralement les titres des champs. Voyons un exemple. Supposons que nous voulions représenter des personnages du livre du Seigneur des Anneaux au format csv :

Name,Race
Frodo,hobbit
Aragorn,man
Legolas,elf
Gimli,dwarf

Celui ci-dessus est un exemple trivial du contenu d’un fichier csv. Comme vous pouvez le voir, nous avons utilisé le , (virgule) comme séparateur de champs. Nous enregistrons ces données dans un fichier appelé lotr.csv. Voyons comment nous pouvons le lire en utilisant le langage de programmation Python
et le module csv.

Lecture d’un fichier csv

Pour interagir avec un fichier csv avec Python, la première chose que nous devons faire est d’importer le module csv. Écrivons un script simple, juste quelques lignes de code :

#!/usr/bin/env python3
import csv

if __name__ == '__main__':
    with open('lotr.csv', newline='') as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            print(row)

Dans cet exemple, nous supposons que le script que nous avons créé ci-dessus (appelons-le script.py) se trouve dans le même répertoire que le fichier csv, et que ledit répertoire est notre répertoire de travail actuel.

La première chose que nous avons faite a été d’importer le module csv ; Ensuite, nous avons ouvert le fichier en mode lecture (par défaut) avec un gestionnaire de contexte, de sorte que nous sommes sûrs que l’objet fichier est toujours fermé chaque fois que l’interpréteur existe le bloc With, même si une sorte d’erreur se produit. Vous pouvez également remarquer que nous avons utilisé l’argument de saut de ligne de la fonction open pour spécifier une chaîne vide comme caractère de saut de ligne. Il s’agit d’une mesure de sécurité, car, comme indiqué dans la documentation csv module
:

Si newline='' n’est pas spécifié, les nouvelles lignes intégrées dans les champs entre guillemets ne seront pas interprétées correctement, et sur les plates-formes qui utilisent des fins de ligne \n en écriture, un supplémentaire sera ajouté. Il devrait toujours être prudent de spécifier newline='', puisque le module csv gère lui-même (universel) les sauts de ligne.

L’objet csvfile représente notre fichier ouvert : nous le passons en argument à la fonction csv.reader qui renvoie un objet reader que nous référençons via la variable csv_reader. Nous utilisons cet objet pour itérer sur chaque ligne du fichier, qui est renvoyé sous la forme d’une liste de chaînes. Dans ce cas, nous les imprimons simplement. Si nous exécutons le script, nous obtenons le résultat suivant :

./script.py
['Name', 'Race']
['Frodo', 'hobbit']
['Aragorn', 'man']
['Legolas', 'elf']
['Gimli', 'dwarf']

C’était assez facile, n’est-ce pas ? Que se passe-t-il si un caractère autre que la virgule est utilisé comme séparateur de champ ? Dans ce cas, nous pourrions utiliser le paramètre delimiter de la fonction et spécifier le caractère qui doit être utilisé. Disons que ledit personnage est |. Nous écririons :

csv_reader = csv.reader(csvfile, delimiter="|")

Lire les champs csv d’un dictionnaire

Celui que nous avons utilisé ci-dessus est probablement le moyen le plus simple que nous puissions utiliser pour lire un fichier csv avec python. Les modules csv définissent également la classe DictReader, qui nous permet de mapper chaque ligne d’un fichier csv à un dictionnaire, où les clés sont les noms de champs et les valeurs sont leur contenu réel dans une rangée. Voyons un exemple. Voici comment nous modifions notre script :

#!/usr/bin/env python3
import csv

if __name__ == '__main__':
    with open('lotr.csv', newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            print(row)

Le premier argument obligatoire du constructeur de la classe DictReader est l’objet fichier créé lorsque nous avons ouvert le fichier. Si nous lançons le script, cette fois nous obtenons le résultat suivant :

{'Name': 'Frodo', ' Race': ' hobbit'}
{'Name': 'Aragorn', ' Race': ' man'}
{'Name': 'Legolas', ' Race': ' elf'}
{'Name': 'Gimli', ' Race': ' dwarf'}

Comme nous l’avons déjà dit, les champs contenus dans la première ligne sont utilisés comme clés du dictionnaire ; Mais que se passe-t-il si la première ligne du fichier ne contient pas les noms de champs ? Dans ce cas, nous pouvons les spécifier en utilisant le paramètre fieldnames du constructeur de la classe DictReader :

reader = csv.DictReader(csvfile, fieldnames=['Name', 'Race])

Créer un fichier csv

Jusqu’à présent, nous avons simplement vu comment lire les données d’un fichier csv, à la fois sous la forme d’une liste de chaînes de caractères représentant chacune une ligne, et sous la forme d’un dictionnaire. Voyons maintenant comment créer un fichier csv. Comme toujours, nous commençons par un exemple, puis nous l’expliquons. Imaginons que nous voulions créer par programmation le fichier csv que nous avons créé manuellement auparavant. Voici le code que nous écririons :

#!/usr/bin/env python3
import csv

if __name__ == '__main__':
    with open('lotr.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        for row in (('Name', 'Race'), ('Frodo', 'hobbit'), ('Aragorn', 'man'), ('Legoals', 'elf'), ('Gimli', 'dwarf')):
            writer.writerow(row)

La première chose que vous devriez remarquer est que cette fois-ci, nous avons ouvert le fichier lotr.csv en mode d’écriture (w). Dans ce mode, un fichier est créé s’il n’existe pas, et est tronqué dans le cas contraire (consultez notre article sur la réalisation d’opérations d’entrée/sortie sur des fichiers avec Python si vous voulez en savoir plus sur ce sujet).

Au lieu d’un objet reader, nous avons cette fois créé un objet writer, en utilisant la fonction writer fournie dans le module csv. Les paramètres acceptés par cette fonction sont très similaires à ceux acceptés par celle du lecteur. On pourrait, par exemple, spécifier un délimiteur alternatif en utilisant le paramètre du même nom.

Comme dans ce cas, nous connaissons déjà toutes les lignes csv à l’avance, nous pouvons éviter d’utiliser une boucle et les écrire toutes en même temps en utilisant la méthode writerows de l’objet writer :

#!/usr/bin/env python3
import csv

if __name__ == '__main__':
    with open('lotr.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows((('Name', 'Race'), ('Frodo', 'hobbit'), ('Aragorn', 'man'), ('Legolas', 'elf'), ('Gimli', 'dwarf')))

Création d’un fichier csv avec l’objet DictWriter

Le module csv fournit une classe DictWriter, qui nous permet de mapper un dictionnaire à une ligne csv. Cela peut être très utile lorsque les données sur lesquelles nous travaillons proviennent de cette façon et que nous voulons les représenter sous forme de tableau. >requests). Voici ce que nous pourrions écrire pour créer un csv basé sur celui-ci :

#!/usr/bin/env python3
import csv

characters_data = [
  {
    'Name': 'Frodo',
    'Race': 'hobbit'
  },
  {
    'Name': 'Aragorn',
    'Race': 'man'
  },
  {
    'Name': 'Legolas',
    'Race': 'elf'
  },
  {
    'Name': 'Gimli',
    'Race': 'dwarf'
  }
]

if __name__ == '__main__':
    with open('lotr.csv', 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=('Name', 'Race'))
        writer.writeheader()
        writer.writerows(characters_data)

Voyons ce que nous avons fait. Tout d’abord, nous avons créé une instance de la classe DictWriter, en passant en arguments l’objet fichier (csvfile) et then fieldnames, qui doivent être une séquence de valeurs à utiliser comme noms de champs csv, et détermine dans quel ordre les valeurs contenues dans chaque dictionnaire doivent être écrites dans le fichier. Alors que dans le cas du constructeur de la classe DictReader, ce paramètre est facultatif, ici il est obligatoire, et il est facile de comprendre pourquoi.

Après avoir créé l’objet writer, nous avons appelé sa méthode writeheader : cette méthode est utilisée pour créer la ligne csv initiale, contenant les noms de champs que nous avons passés dans le constructeur.

Enfin, nous avons appelé la méthode writerows pour écrire toutes les lignes csv en une seule fois, en passant la liste des dictionnaires en argument (ici, nous les avons référencés par la variable characters_data). C’est fait !

Conclusions

Dans cet article, nous avons appris les bases de la lecture et de la création de fichiers csv à l’aide du langage de programmation Python. Nous avons vu comment lire les lignes d’un fichier csv à la fois sous forme de liste de chaînes et dans un dictionnaire à l’aide d’un objet DictReader, et comment créer un nouveau fichier csv en écrivant une ligne à la fois, ou toutes les lignes à la fois. Enfin, nous avons vu comment créer un fichier csv à partir d’une liste de dictionnaires pouvant être renvoyés à partir d’un appel API. Si vous souhaitez en savoir plus sur le module python csv, veuillez consulter la documentation officielle.

Articles connexes: