Table des matières
Bases de données - Exercice préparatoire
Fichiers utiles : films.csv et actors.csv
Exercice 1 : extraire et rechercher des données
Écrire un programme Python qui implémente les fonctions suivantes :
# data.py
import csv
def creer_base_films():
"""
extrait le contenu du fichier films.csv
renvoie les données sous forme d'un tableau de dictionnaires
"""
films = []
with open("films.csv", "r", encoding="utf8") as file:
reader = csv.DictReader(file, delimiter = ";")
for row in reader:
film = dict(row)
films.append(film)
return films
def recherche_realisateur(base, nom):
"""
base: données extraites du fichier films
nom: nom du réalisateur cherché
renvoie les titres de films dont réalisés par ce réalisateur
"""
def recherche_annees_acteur(base, nom):
"""
base: données extraites du fichier films
nom: nom de l'acteur cherché
renvoie les années des films dans lesquels joue l'acteur demandé
"""
def count_pays(base, pays):
"""
base: données extraites du fichier films
pays: code d'un pays (exemple FRA pour France)
renvoie le nombre de films pour un pays
Attention: Dans la colonne pays du fichier,
il y a souvent plusieurs pays pour un film, comme FRA - ITA
"""
if __name__ == "__main__":
# zone de test
base = creer_base_films()
films_mel_brooks = recherche_realisateur(base, "BROOKS Mel")
print(films_mel_brooks)
annees_bulle_ogier = recherche_annees_acteur(base, "Bulle Ogier")
print(annees_bulle_ogier)
n_FRA = count_pays(base, "FRA")
print(n_FRA)
Je vous rappelle que csv.DictReader peut être vu comme une machine qui se charge
- d'extraire la première ligne du fichier pour obtenir les noms des colonnes,
- d'extraire chaque ligne en la distribuant dans un dictionnaire dont les clés sont les noms des colonnes.
La commande for row in reader (ligne 13) consiste à demander à reader d'extraire la prochaine ligne. Quand il n'y a plus de lignes à extraire, reader ne renvoie rien et la boucle prend fin.
À noter que la donnée row fournie par reader est proche d'un dictionnaire mais n'en est pas tout à fait un. Donc on transforme row en un dictionnaire : dict(row).
Exercice 2 : Fusionner des données
On dispose d'un autre fichier, actors.csv, répertoriant les années de naissance – pas les vraies – des acteurs et actrices.
Comment peut-on obtenir le titre de tous les films dans lequel a joué un acteur né en 1977 ?
Je ne vous demande pas de le coder, expliquez seulement ce qu'il faudrait faire.
Exercice 3 : Cohérence des données
Supposons que l'on fasse des ajouts, suppressions ou modifications dans les fichiers films.csv et actors.csv.
- Y a-t-il des contraintes particulières à respecter ?
- Supposons que deux acteurs aient le même nom. Que faire ?
