Traitement des données en table avec le module CSV
Afin d'avoir des exemples plus complexes à traiter, dans la suite, nous allons travailler sur les données contenues dans le fichier villes.csv.
Exercice 1
Ecrire une fonction liste_villes
de paramètre un fichier csv
et qui renvoie une liste de dictionnaires contenant les données du fichier.
Voir une solution
import csv
def liste_villes(fichier_csv):
tabvilles = []
with open(fichier_csv, newline='',encoding='utf-8') as fichier:
contenu = csv.DictReader(fichier, delimiter=',')
for ligne in contenu:
tabvilles.append(ligne)
return tabvilles
Masquer
Exercice 2
Analysez et testez les lignes de code suivantes :
table_villes = liste_villes('villes.csv')
print(table_villes[0])
Exercice 3
Ecrire une fonction affiche_descripteurs
qui permet d'afficher les descripteurs (ici les clés des dictionnaires)
Voir une solution
def affiche_descripteurs(dico):
descripteurs=[]
for descripteur in dico[0].keys():
descripteurs.append(descripteur)
return descripteurs
print(affiche_descripteurs(table_villes))
Masquer
Exercice 4
Ecrire une fonction de recherche recherche
par rapport à un descripteur.
Voir une solution
def recherche(liste_dico,rech,descripteur):
liste_recherche=[]
for e in liste_dico:
if rech==e[descripteur]:
liste_recherche.append(e)
return liste_recherche
print(recherche(table_villes,"Sainte-Anne","nom"))
Masquer
Exercice 5
Analysez et testez le programme suivant :
def recherche2(liste_dico,rech1,rech2="971",descripteur1="nom",descripteur2="dep"):
liste_recherche=[]
for e in liste_dico:
if rech1==e[descripteur1] and rech2==e[descripteur2]:
liste_recherche.append(e)
return liste_recherche
print(recherche2(table_villes,"Sainte-Anne"))
Exercice 6
Écrire une fonction liste_communes
de paramètre le fichier csv et qui renvoie la liste de dictionnaire ayant 3 clés qui les descripteurs : 'dep', 'nom' et 'hab' pour 'nb_hab_2012' qui sera un entier.
Voir une solution
def liste_communes(fichier_csv):
tabvilles = []
with open(fichier_csv, newline='',encoding='utf-8') as fichier:
contenu = csv.DictReader(fichier, delimiter=',')
for ligne in contenu:
dico={}
dico['dep']=ligne['dep']
dico['nom']=ligne['nom']
dico['hab']=int(ligne['nb_hab_2012'])
tabvilles.append(dico)
return tabvilles
table_communes = liste_communes('villes.csv')
print(table_communes[0])
Masquer
Exercice 7
Ecrire une fonction qui renvoie la liste des villes de plus de 100 000 habitants (en 2012).
Voir une solution
Voici la version qui renvoie la liste des dictionnaires :
def recherche3(liste_dico,rech=100000,descripteur='hab'):
liste_recherche=[]
for e in liste_dico:
if rech < e[descripteur]:
liste_recherche.append(e)
return liste_recherche
print(recherche3(table_communes))
Version qui renvoie juste le nom des villes :
def recherche3(liste_dico,rech=100000,descripteur='hab'):
liste_recherche=[]
for e in liste_dico:
if rech < e[descripteur]:
liste_recherche.append(e['nom'])
return liste_recherche
print(recherche3(table_communes))
Masquer
Exercice 8
Ecrire une fonction communes_top10
qui renvoie la liste des 10 communes les plus peuplées en 2012.
Voir une solution
Voici la version qui renvoie la liste des dictionnaires :
def communes_top10(table=table_communes,hab="hab"):
def cle(table):
return table[hab]
table.sort(key=cle,reverse=True)
return [table[i] for i in range(10)]
print(communes_top10())
Masquer
Exercice 9
Ecrire une fonction communes_top10_par_dep
qui renvoie la liste des 10 communes les plus peuplées en 2012 d'un département.
Voir une solution
Voici la version qui renvoie la liste des dictionnaires :
def communes_top10_par_dep(dep,table=table_communes,hab="hab"):
liste_recherche=[]
for e in table:
if e['dep']==dep:
liste_recherche.append(e)
def cle(liste_recherche):
return liste_recherche[hab]
liste_recherche.sort(key=cle,reverse=True)
return [liste_recherche[i] for i in range(10)]
print(communes_top10_par_dep('971'))
Masquer
Exercice 10
Écrire une fonction habitants
qui renvoie le nombre d'habitants en 2012 par département.
Voir une solution
def habitants(dep, table=table_communes, hab='hab'):
nb_hab=0
for e in table:
if dep==e['dep']:
nb_hab = nb_hab + e[hab]
return nb_hab
print(habitants("971"))
Masquer