2022-02-09 17:10:52 +01:00
## Données en table & Fichiers CSV
Un chapitre Excel-lent !

2026-01-29 23:37:26 +01:00
> Le format CSV est fréquemment utilisé pour échanger des données traitées à l'aide de tableurs ou de logiciels de traitement de bases de données. Ici, notre objectif sera d'apprendre à importer et exporter des données dans Python à l'aide du format CSV.
2022-02-09 17:10:52 +01:00
2026-01-29 23:37:26 +01:00
## Sommaire
2022-02-09 17:10:52 +01:00
2026-01-29 23:37:26 +01:00
| Chapitre | Description |
|----------|-------------|
| [Cours principal ](#apport-de-connaissances ) | Fichiers CSV, enregistrements, import/export |
| [Manipulation de tables ](MANIPULATION.md ) | Recherche, filtrage et tri de données |
| [Fusion de tables ](FUSION.md ) | Jointure et fusion de données |
| [Introduction à Pandas ](PANDAS.md ) | Utilisation de la bibliothèque Pandas |
| [Exercices ](Exercices/ ) | Exercices d'application |
2022-02-09 17:10:52 +01:00
En informatique, il est courant de traiter d'importantes quantités d'informations, c'est d'ailleurs le modèle économique de bon nombre de sites et services que vous utilisez quotidiennement : *réseaux sociaux, magasins en ligne, cabinets d'analyses...*
2022-02-09 19:17:59 +01:00
> **Contenu**: Définition d'un fichier CSV, de données en table, recherche dans une table, fonction de tri <br>**Compétences**: Savoir exporter et importer des données dans un programme Python depuis un fichier CSV
2022-02-09 17:10:52 +01:00
2022-02-09 19:15:42 +01:00
### Le programme
2022-02-09 17:10:52 +01:00
<br>
2022-02-09 19:22:35 +01:00

2022-02-09 17:10:52 +01:00
2022-02-09 19:15:42 +01:00
### <span style="color:green"> Apport de connaissances </span>
2022-02-09 17:10:52 +01:00
2022-02-24 09:14:56 +01:00
Les données en table sont une composante essentielle de l'informatique : de très nombreuses entreprises utilisent des tableurs afin de traiter un gros volume de données. <p>
2022-02-09 17:10:52 +01:00
<p>
En maîtrisant cet aspect, nous pourrons commencer à utiliser de petites bases de données pour nos activités, mais également travailler sur des projets plus intéressants.
2022-02-17 23:05:03 +01:00
---------------
2022-02-09 17:10:52 +01:00
### <span style="color: green" > Enregistrements </span>
Un **enregistrement** est une structure de données (différentes ou non) auxquelles on accède grâce à un nom.
On peut donc représenter les notes d'une élève dans différentes disciplines à l'aide d'un **enregistrement**
```python
{ 'Nom' : 'Jean-Yves' , 'Anglais' : '17' , 'NSI' : '18' , 'Maths' : '16' }
```
À quelle structure de données python cela vous fait-il penser ?
✏ *Les clés sont parfois appelées champs ou attributs quand on parle de base de données* ✏
2022-02-09 19:15:42 +01:00
-----------
2022-02-09 17:10:52 +01:00
### <span style="color: green" > Fichiers CSV</span>
Le format CSV (***Comma Separated Value***) est employé poour importer / exporter des données depuis ou vers un tableur.
C'est une sorte de fichier texte dans lequel chaque ligne correspond à une ligne du tableau.
Comme son nom l'indique, on sépare les colonnes (et donc les valeurs) par une **virgule** , ou par un **point-virgule** .
Il permet donc de représenter une liste d'enregistrement ayant les même **champs** .
→ Exemple de feuille de calcul<br>
| Prénom | DS1 | DS2 | Projet |
| ------------ | ---- | ---- | ------ |
| Michelangelo | 12 | 14 | B |
| Leonardo | 15 | 16 | A |
| Raphael | 10 | 12 | C |
| Donatello | 13 | 15 | B |
On peut donc représenter ce tableau sous forme d'un fichier "notes.csv" :
```
Prenom; DS1; DS2; Projet
Michelangelo; 12; 14; B
Leonardo; 15; 16; A
Raphael; 10; 12; C
Donatello; 13; 15; B
```
Chaque ligne est un ** *enregistrement***. La première ligne définit les ** *attributs*** de chaque enregistrement.
2022-02-09 19:15:42 +01:00
------------------
### <span style="color: green" > Implémentation en Python</span>
On peut choisir de représenter en Python les fichiers **CSV** par des listes de dictionnaires dont les clés sont les noms des colonnes.
Par exemple, avec le tableau du dessus, cela donne :
```python
2022-02-17 23:05:03 +01:00
Notes = [{ 'Prénom' : 'Michelangelo' , 'DS1' : '12' , 'DS2' : '14' , 'Projet' : 'B' },
2022-02-09 19:15:42 +01:00
{ 'Prénom' : 'Leonardo' , 'DS1' : '15' , 'DS2' : '16' , 'Projet' : 'A' },
{ 'Prénom' : 'Raphael' , 'DS1' : '10' , 'DS2' : '12' , 'Projet' : 'C' },
{ 'Prénom' : 'Donatello' , 'DS1' : '13' , 'DS2' : '15' , 'Projet' : 'B' }]
```
On peut utiliser le vocabulaire décrivant une feuille de calcul de tableau :
- Une table est une liste de dictionnaire, ici **Notes**
- Chaque ligne est un dictionnaire et correspond à un enregistrement, par exemple **Notes[0]**
- Chaque cellule contient la valeur d'une clé du dictionnaire, par exemple **Notes[0] ['DS2']**
-----------------
### <span style = "color : green">Import d'un fichier CSV </span>
Il existe un module Python nommé *CSV* qui permet de manipuler ces fichiers.
On va donc créer une liste de dictionnaires, soit un par ligne de la table.
```python
import csv
def import_csv ( fichier ):
2022-02-24 09:24:25 +01:00
lecteur = csv . DictReader ( open ( fichier + '.csv' , 'r' ))
2022-02-09 19:15:42 +01:00
return [ dict ( ligne ) for ligne in lecteur ]
```
Ce qui nous donne :
```python
[{ 'Prénom' : 'Michelangelo' , 'DS1' : '12' , 'DS2' : '14' , 'Projet' : 'B' },
{ 'Prénom' : 'Leonardo' , 'DS1' : '15' , 'DS2' : '16' , 'Projet' : 'A' },
{ 'Prénom' : 'Raphael' , 'DS1' : '10' , 'DS2' : '12' , 'Projet' : 'C' },
{ 'Prénom' : 'Donatello' , 'DS1' : '13' , 'DS2' : '15' , 'Projet' : 'B' }]
```
On peut également manipuler les fichiers afin de lire puis de le transformer en tableau :
```python
import csv
def import_csv2 ():
resultat = []
with open ( 'notes.csv' , newline = '' ) as csvfile :
s = csv . reader ( csvfile , delimiter = ';' )
for i in s :
resultat . append ( i )
return resultat
```
2022-02-09 17:10:52 +01:00
2022-02-09 19:15:42 +01:00
On obtient donc ici la liste suivante :
```python
resultat = [[ 'Prenom' , 'DS1' , 'DS2' , 'Projet' ], [ 'Michelangelo' , '12' , '14' , 'B' ],
[ 'Leonardo' , '15' , '16' , 'A' ], [ 'Raphael' , '10' , '12' , 'C' ], [ 'Donatello' '13' , '15' , 'B' ]]
```
-------
### <span style = "color : green">Export d'un fichier CSV </span>
2026-01-29 23:37:26 +01:00
Pour exporter une table vers un **fichier CSV** - *comprendre, créer un fichier csv depuis une table python* - on passe la table directement en paramètre, ainsi que le nom du fichier et l'ordre des colonnes.
2022-02-09 19:15:42 +01:00
```python
2026-01-29 23:37:26 +01:00
def vers_csv ( table , nom_fichier , ordre ):
with open ( nom_fichier + '.csv' , 'w' ) as fic :
2022-02-09 19:15:42 +01:00
dic = csv . DictWriter ( fic , fieldnames = ordre )
dic . writeheader () # première ligne, celle des attributs
for ligne in table :
2026-01-13 14:46:09 +01:00
dic . writerow ( ligne ) # ajoute les lignes de la table
2022-02-09 19:15:42 +01:00
return None
2026-01-29 23:37:26 +01:00
# Exemple d'utilisation
Notes = [{ 'Prénom' : 'Michelangelo' , 'DS1' : '12' , 'DS2' : '14' , 'Projet' : 'B' }]
vers_csv ( Notes , 'notes' , [ 'Prénom' , 'DS1' , 'DS2' , 'Projet' ])
2022-02-09 19:15:42 +01:00
```
2022-02-09 17:10:52 +01:00
2022-07-21 15:38:24 +02:00
----------
Auteur : Florian Mathieu
2026-08-11 23:29:03 +02:00
Licence CC BY-SA
2022-07-21 15:38:24 +02:00
2026-08-11 23:29:03 +02:00
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International</a>.
2022-07-21 15:38:24 +02:00