Découvrir le format CSV
Qu'est-ce qu'un fichier CSV ?
Un fichier CSV (Comma Separated Values) est un fichier texte qui permet de stocker des données sous forme de table.
Exemple de fichier eleves.csv :
Chaque ligne correspond à un enregistrement.Les valeurs sont séparées par un séparateur, souvent :
-
une virgule
-
ou un point-virgule
Intérêt du format CSV
-
format simple
-
exploitable facilement par une personne
-
compatible avec de nombreux logiciels :
-
tableur
-
Python
-
bases de données
Lire un fichier CSV en Python
Notion Python : le module csv
Pour manipuler un fichier CSV, on utilise le module csv.
Lire un fichier CSV ligne par ligneimport csv
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.reader(fichier)
for ligne in lecteur:
print(ligne)
Quelques explications
open(...) ouvre le fichier
"r" signifie lecture
csv.reader(...) permet de lire le contenu
chaque ligne est une liste de chaînes de caractères
Lire un CSV avec les noms de colonnes
import csv
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier)
for ligne in lecteur:
print(ligne)
{'id': '1', 'nom': 'Alice', 'age': '17', 'ville': 'Lyon'}
{'id': '2', 'nom': 'Hugo', 'age': '16', 'ville': 'Saint-Étienne'}
Les valeurs lues depuis un fichier CSV sont des chaînes de caractères. Il faut donc parfois convertir :
Activité
Créer à l'aide de notepad++ le fichier eleves.csv. Enregistrer le fichier créer dans votre répertoire courant de travail avec édupython.
Exercice 1
Afficher uniquement les noms des élèves.
Exercice 2
Afficher les élèves de Lyon.
Exercice 3
Compter les élèves âgés de 16 ans.
Une réponse pour l'exercice 1 ?
Une réponse pour l'exercice 2 ?
Une réponse pour l'exercice 3 ?
Écrire un fichier CSV
Écrire dans un fichier CSV
On peut créer un nouveau fichier CSV avec csv.writer.
Ecrivons un fichier à partir d'une suite de listes
import csv
with open("nouveau.csv", "w", newline="", encoding="utf-8") as fichier:
ecrivain = csv.writer(fichier)
ecrivain.writerow(["id", "nom", "age", "ville"])
ecrivain.writerow([1, "Alice", 17, "Lyon"])
ecrivain.writerow([2, "Hugo", 16, "Saint-Étienne"])
Quelques explications
"w" signifie écriture
newline="" évite des lignes vides supplémentaires selon les systèmes
writerow(...) écrit une ligne
Écrire un CSV à partir d'une liste de dictionnaires
import csv
eleves = [
{"id": 1, "nom": "Alice", "age": 17, "ville": "Lyon"},
{"id": 2, "nom": "Hugo", "age": 16, "ville": "Saint-Étienne"},
{"id": 3, "nom": "Lina", "age": 17, "ville": "Lyon"}
]
with open("eleves_sortie.csv", "w", newline="", encoding="utf-8") as fichier:
attributs = ["id", "nom", "age", "ville"]
ecrivain = csv.DictWriter(fichier, fieldnames=attributs)
ecrivain.writeheader()
for e in eleves:
ecrivain.writerow(e)
Activité
Exercice 1
Créer un fichier films.csv contenant :
| titre | annee | note |
|---|---|---|
| Inception | 2010 | 9 |
| Avatar | 2009 | 8 |
| Matrix | 1999 | 10 |
Exercice 2
Créer un fichier CSV contenant uniquement les élèves de Lyon.
Modifier un fichier CSV
L'idée générale :
Un fichier CSV ne se modifie pas directement ligne par ligne de façon simple.
En pratique, on procède souvent ainsi :
-
on lit le fichier
-
on stocke les données en mémoire
-
on modifie les données
-
on réécrit le fichier complet
Exemple : modifier l'âge d'un élève
On veut changer l'âge de Hugo et mettre 17.
import csv
eleves = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier)
for ligne in lecteur:
if ligne["nom"] == "Hugo":
ligne["age"] = "17"
eleves.append(ligne)
with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
attributs = ["id", "nom", "age", "ville"]
ecrivain = csv.DictWriter(fichier, fieldnames=attributs)
ecrivain.writeheader()
for e in eleves:
ecrivain.writerow(e)
Exemple : ajouter un élève
import csv
eleves = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier)
for ligne in lecteur:
eleves.append(ligne)
nouvel_eleve = {"id": "5", "nom": "Sara", "age": "16", "ville": "Annecy"}
eleves.append(nouvel_eleve)
with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
attributs = ["id", "nom", "age", "ville"]
ecrivain = csv.DictWriter(fichier, fieldnames=attributs)
ecrivain.writeheader()
for e in eleves:
ecrivain.writerow(e)
Exemple : supprimer les élèves d'une ville
import csv
eleves = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
lecteur = csv.DictReader(fichier)
for ligne in lecteur:
if ligne["ville"] != "Lyon":
eleves.append(ligne)
with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
attributs = ["id", "nom", "age", "ville"]
ecrivain = csv.DictWriter(fichier, fieldnames=attributs)
ecrivain.writeheader()
for e in eleves:
ecrivain.writerow(e)
Activité complète avec deux fichiers CSV
Fichier 1 : eleves.csv
Fichier 2 : notes.csv
Travail demandé
Partie A — Lecture
-
Lire le fichier eleves.csv
-
Lire le fichier notes.csv
-
Afficher tous les élèves
-
Afficher toutes les notes
Partie B — Filtrage
-
Afficher les élèves de la classe 1A
-
Afficher toutes les notes de maths
-
Afficher les notes supérieures ou égales à 15
Partie C — Fusion
Construire une table fusionnée contenant :
-
nom
-
classe
-
matière
-
note
Partie D — Écriture
Écrire le résultat de la fusion dans un fichier resultat.csv
Ajouter une donnée dans un fichier CSV existant
On souhaite ajouter une donnée dans un fichier csv existant, à la suite des autres données, sans réécrire tout le fichier.
on veut ajouter une nouvelle élève au fichier eleves.csv
On remarque l'utilisation du paramètre "a" pour append