Nous allons dans cette partie tenter de gérer des grandes quantités de données.
Indexation des données en tables
Dans cette partie nous allons utiliser ce fichier de données countries.csv. Ce fichier contient des données générales sur les pays du monde, en voici un extrait :
iso,name,area,population,continent,currency_code,currency_name,capital
AD,Andorra,468.0,84000,EU,EUR,Euro,6
AE,United Arab Emirates,82880.0,4975593,AS,AED,Dirham,21
AF,Afghanistan,647500.0,29121286,AS,AFN,Afghani,81
AG,Antigua and Barbuda,443.0,86754,NA,XCD,Dollar,119
AI,Anguilla,102.0,13254,NA,XCD,Dollar,126
AL,Albania,28748.0,2986952,EU,ALL,Lek,157
AM,Armenia,29800.0,2968000,AS,AMD,Dram,191
AO,Angola,1246700.0,13068161,AF,AOA,Kwanza,235
AR,Argentina,2766890.0,41343201,SA,ARS,Peso,382
Le format csv, signifie "comma separated values" ou "valeurs séparées par une virgule". Il permet de récupérer des données brutes, sans aucune mise en forme.
Ce format universel permet de partager des données entre de nombreuses applications.
Le séparateur "virgule" n'est plus le seul séparateur utilisé, en effet, cela pose des problèmes pour séparer des valeurs contenant elles même des virgules. On peut donc choisir d'autres séparateurs comme présenté ci-dessous :
import d'un fichier csv dans le tableur de libre office
Pour bien différencier le nom du pays de façon générale (la colonne Ce format universel permet de partager des données entre de nombreuses applications.
Le séparateur "virgule" n'est plus le seul séparateur utilisé, en effet, cela pose des problèmes pour séparer des valeurs contenant elles même des virgules. On peut donc choisir d'autres séparateurs comme présenté ci-dessous :
name) du nom d'un pays en particulier (Angola, Australia...), on différencie le champ de sa valeur :
Indexation sous forme de tableau de tableaux
Une première solution pour utiliser et indexer ce fichier en python est la suivante :
import csv
def index_tableau(nomDeFichier):
tab=[]
with open(nomDeFichier,'r',encoding='utf-8') as f:
lecteur=csv.reader(f,delimiter=',')
for row in lecteur:
tab.append(row)
return tab
Ce code permet, grâce au module csv, de placer les données du fichier countries.csv dans une structure de données python.
- Récupérer le fichier de données et le code ci-dessus et enregistrer le fichier .csv et le fichier .py dans le même répertoire.
- Utiliser la fonction
index_tableaupour récupérer les données. - Afficher le tableau ainsi obtenu.
import csv
def index_tableau(nomDeFichier):
tab=[]
with open(nomDeFichier,'r',encoding='utf-8') as f:
lecteur=csv.reader(f,delimiter=',')
for row in lecteur:
tab.append(row)
return tab
Les données ont donc été indexées. Nous avons maintenant accès à ces données grâce aux index du tableau.
- Afficher la 3eme ligne de données
- Afficher la 52eme ligne de données
import csv
def index_tableau(nomDeFichier):
tab=[]
with open(nomDeFichier,'r',encoding='utf-8') as f:
lecteur=csv.reader(f,delimiter=',')
for row in lecteur:
tab.append(row)
return tab
On peut remarquer ici, qu'une fois indexées, les données perdent l'entête de la colonne et donc la signification de chaque champ de données.
La lisibilité et l'accès des données n'est donc pas aisé.
Il va falloir choisir une structure de données plus judicieuse.
Indexation sous forme de tableau de dictionnaires
Le dictionnaire est une structure de données plus adaptée pour réaliser l'indexation des données.Le module
csv de python permet également d'indexer les données sous forme de dictionnaire :
import csv
def index_dico(nomDeFichier):
tab=[]
with open(nomDeFichier,'r',encoding='utf-8') as f:
lecteur=csv.DictReader(f,delimiter=',')
for row in lecteur:
tab.append(dict(row))
return tab
- Récupérer le fichier de données et le code ci-dessus et enregistrer le fichier csv et le fichier python dans le même répertoire.
- Utiliser la fonction
index_dico()pour récupérer les données. - Afficher les dictionnaires ainsi obtenus.
- Afficher la 3eme ligne de données
- Afficher la 52eme ligne de données
import csv
def index_dico(nomDeFichier):
tab=[]
with open(nomDeFichier,'r',encoding='utf-8') as f:
lecteur=csv.DictReader(f,delimiter=',')
for row in lecteur:
tab.append(dict(row))
return tab
L'indexation dans des dictionnaires a de nombreux avantages et pas seulement l'affichage des noms des champs à coté de chaque valeur :
- Cela va simplifier la lisibilité des données grâce aux clef et aux valeurs.
- Cela va simplifier et optimiser les recherches.
- Cela va faciliter les liens entre les données de différentes tables.
- Bref le dictionnaire est la structure adaptée pour le traitement des données en tables.