Accueil
Mes tutoriels sur la programmation

Tutoriel Python - sommaire


Vous pouvez me contacter via Facebook (questions, critiques constructives) : page Facebook relative à mon site

Gestion avec Python des fichiers CSV et JSON

Dans le chapitre XI vous avez vu comment gérer des fichiers de texte brut. Python est capable aussi de manipuler des fichiers formatés soit au format CSV ou au format JSON. Mais avant, je voudrais évoquer un utilitaire très pratique pour Python, je veux parler de pip.

pip : gestionnaire de paquets

Présentation de pip

Une des atouts de Python est la multitude de bibliothèques (ou librairies) disponibles.

Ne confondez pas bibliothèques Python et modules Python.
Les modules Python sont installés mais pas disponibles par défaut, il faut les "importer" !
Les bibliothèques sont des extensions du langage Python. Il faut les télécharger !
Pour que le téléchargement de ces bibliothèques ne devienne pas un parcours du combattant, il a été imaginé un outil qui s'appelle pip.

pip est un gestionnaire de paquets utilisé pour installer et gérer des librairies Python.
À partir des versions 3, pip est inclus par défaut dans la distribution officielle du langage. Donc, en clair, si vous avez installé une version de Python 3, vous n'avez plus besoin d'installer le programme pip, c'est déjà fait !

Utilisation de pip

Attention il faut lancer "pip" à partir de la fenêtre de commandes de Windows (et non pas à partir de l'interpréteur Python).
Donc sous Windows10 : clic droit sur le bouton "démarrer" puis séléctionnez dans la liste qui s'affiche, "WindowsPowerShell".

Exemple : nous voulons installer la bibliothèque pandas.
Dans la fenête "WindowsPowerShell" tapez : pip install pandas

Ci-dessous capture d'écran qui montre toutes les librairies Python installées sur mon ordinateur (commande : pip list) :

Manipuler des fichiers CSV Python

Format de fichier CSV

Le sigle CSV signifie 'comma separated values' qui veut dire 'valeurs séparées par des virgules'. Il définit un format de fichier pour l'échange de données tabulaires.

Exemple

J'ai un classeur réalisé avec calc de libre Office. J'ai besoin de ces données pour un traitement avec Python.
Je dois d'abord enregistrer le classeur dans un fichier CSB à partir de Calc.
Commande : Fichier/Enregistrez sous / type : texte csv , nom : bareme.csv
Ce fichier de données CSV est enregistré dans c : /python_prog sous le nom "bareme.csv".
Vous pouvez afficher ce fichier avec l'application "bloc-notes".

Contenu du fichier "bareme.csv"

référence,désignation ,prix ht
bo 001,boulons de 7 par 100,5
bo 0002,boulons de 8 par 100,6
bo 0003,boulons de 9 par 100,8
cl 001,clous 50mm par 100,4
cl 002,clous 70mm par 100,5

Lorsque j'ai créé ce fichier, Calc m'a demandé quel délimiteur je voulais comme délimiteur de champs ; j'ai répondu la virgule (j'aurais pu dire " ;").

Manipulation de ces données par Python

Je vais gérer ce fichier CSV avec Python.

Les commandes dans l'interpréteur

>>> import csv >>> import os >>> os.chdir("c:/python_prog") #chgt de directory >>> fichier =open('bareme.csv','r') >>> contenu =csv.reader(fichier,delimiter =',') >>> for ligne in contenu: ... print(ligne) #affichage de toutes les colonnes du tableau ... ['référence', 'désignation ', 'prix ht'] ['bo 001', 'boulonsde 7 par 100', '5'] ['bo 0002', 'boulons de 8 par 100', '6'] ['bo 0003', 'boulons de 9 par 100', '8'] ['cl 001', 'clous 50mm par 100', '4'] ['cl 002', 'clous 70mm par 100', '5'] >>> for ligne in contenu: ... print(ligne[0], ligne[2]) #affichage des colonnes 'références' et 'prix ht' référence prix ht bo 001 5 bo 0002 6 bo 0003 8 cl 001 4 cl 002 5 >>>

Analyse de cette série de commandes

Il faut importer le module csv qui permet de manipuler les fichiers à ce format.
Il faut aussi importer le module os pour disposer de la fonction chdir() qui permet de changer de répertoire courant.

Le fichier "bareme.csv" est ouvert en lecture (mode : "r").
Le contenu du fichier est récupéré avec la méthode reader() du module.
Cette méthode permet de récupérer le contenu du fichier sous forme de listes à raison d'un liste par ligne.
Avec une boucle on peut parcourir toutes les listes.
On peut afficher seulement certaines colonnes ; la première colonne a l'indice 0.

Récupérer le contenu du fichier CSV sous forme de dictionnaires

Nous venons de voir que la méthode reader du module csv récupérait le contenu du fichier CSV sous forme de listes. On peut récupérer le contenu sous forme de dictionnaires.

Les commandes

>>> fichier =open('bareme.csv','r')
>>> dicos = csv.DictReader(fichier,delimiter =',')
>>> for dico in dicos :
...     print(dico)
...
{'référence': 'bo 001', 'désignation ': 'boulonsde 7 par 100', 'prix ht': '5'}
{'référence': 'bo 0002', 'désignation ': 'boulons de 8 par 100', 'prix ht': '6'}
{'référence': 'bo 0003', 'désignation ': 'boulons de 9 par 100', 'prix ht': '8'}
{'référence': 'cl 001', 'désignation ': 'clous 50mm par 100', 'prix ht': '4'}
{'référence': 'cl 002', 'désignation ': 'clous 70mm par 100', 'prix ht': '5'}

Commentaire

Utilisation de la méthode DictReader() !

Pour chaque ligne du fichier CSV d'origine on obtient un dictionnaire.
Comme le fichier d'origine avait trois colonnes, chaque dictionnaire comprend trois items.
Les clés des items sont les en-tête de colonne du fichier d'origine : référence, désignation, prix ht.

Écrire dans un fichier CSV

Maintenant que nous savons lire un fichier CSV, l’écriture n’est guère plus compliquée.

Nous allons créer un fichier CSV dans le cadre d'un programme.

Le code du programme

#nom programme : fichier_csv_ecrire.py
#objet : écrire dans un fichier csv
import csv

with open('donnees.csv', 'w') as fichier:
    ecrivain = csv.writer(fichier)
    ecrivain.writerow( ('id', 'Nom', 'Age', 'Taille') )
    ecrivain.writerow( (1,'alain', 19, 180 ) )
    ecrivain.writerow( (2,'bernard', 30, 185) )
    ecrivain.writerow( (3,'claude', 27, 175) )
print("fichier crée")
fichier.close()
print("fichier crée")
fichier.close()

On écrit dans le fichier une série de tuples ; le premier tuple fait fonction d'en-tête. Tous les tuples ont la même structure: id, nom, âge, taille.

Le contenu du fichier "donnees.csv" obtenu via ce programme

id,Nom,Age,Taille
1,alain,19,180
2,bernard,30,185
3,claude,27,175

Remarque importante : ouverture en mode "w". Donc si le fichier existe il est écrasé et s'il n'existe pas il est crée.
Pour écrire dans un fichier CSV il faut utiliser les méthodes writer() & writerow()
La première méthode a pour argument l'objet "file" et produit un objet "ecrivain".
La deuxième méthode appliquée à l'objet "ecrivain" permet d'écrire une ligne dans le fichier.

Manipuler des fichiers JSON avec Python

JSON (JavaScript Object Notation) est un format de données standard utilisé pour représenter et stocker des données structurées constitués d'items (paires clé-valeur), donc similaire à un dictionnaire Python.

Ce format initié d'abord pour le langage JavaScript est maintenant devenu un standard indépendant de ce langage de de programmation pour le web.

Récupérer le contenu d'un fichier JSON

Contenu du fichier

Fichier créé avec l'application "Bloc-notes".

{"nom": "Allemand",
"prenom" : "claude",
"adresse" : "rue des Poilus",
"localite": "62100 Calais",
"email": "allemandclaude@gmail.com", 
"loisirs": ["Sport", "Cinema", "Lecture" , "Voyage"]
}

Notez que c'est en fait une séquence de type 'dictionnaire' (items de clé-valeur) stocké de façon permanente dans un fichier.

Ouvrir un fichier JSON

Ouvrons le fichier "fiche.json" en mode commande.

>>> import json
>>> import os
>>> os.chdir("c:/python_prog")
>>> with open("fiche.json") as fichier:
...     contenu = json.load(fichier)
...
>>> print(contenu)
{'nom': 'Allemand', 'prenom': 'claude', 'adresse': 'rue des Poilus', 'localite': '62100 Calais', 
'email': 'allemandclaude@gmail.com', 'loisirs': ['Sport', 'Cinema', 'Lecture', 'Voyage']}
>>>
>>> for item in contenu.items():
...     print(item)
...
('nom', 'Allemand')
('prenom', 'claude')
('adresse', 'rue des Poilus')
('localite', '62100 Calais')
('email', 'allemandclaude@gmail.com')
('loisirs', ['Sport', 'Cinema', 'Lecture', 'Voyage'])
>>>fichier.close()

Il faut importer le module json qui permet de manipuler des fichiers de ce format.
Pour récupérer le contenu du fichier, il faut utiliser la méthode load de ce module.
L'objet "contenu" est itérable (peut être parcouru avec une boucle).

Création d'un fichier JSON à partir d'un dictionnaire

Les commandes :

>>> personne = {'nom': 'Albert',
...                 'email': 'albert99@gmail.com',
...                 'loisirs': ['Sport', 'Cinema', 'Lecture', 'Voyage']
...                 }
>>> with open('fiche.json', 'w') as fichier:
...     json.dump(personne, fichier)
>>>fichier.close()

Pour écrire dans un fichier JSON il faut utiliser la méthode dump du module json.

Le contenu précédent de "fiche.json" a été écrasé et remplacé par :

{"nom": "Albert", "email": "albert99@gmail.com", "loisirs": ["Sport", "Cinema", "Lecture", "Voyage"]}

Les fichiers de données c'est bien mais les bases de données, c'est beaucoup mieux !
En effet la manipulation des données est confiée au SQL (Structured Query Language).