Outils pour utilisateurs

Outils du site


nsi:premiere:csv:fusion

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 ?
nsi/premiere/csv/fusion.txt · Dernière modification : de goupillwiki