Des acteurs et leurs rôles

On utilise pour cet exercice 3 tables en téléchargement ci-dessous :

  1. la table personna.csv

  2. la table joue.csv

  3. la table film.csv

Contenu :

id_personne

nom

prenom

1

Brasseur

Claude

2

Boon

Dany

3

Goldblum

Jeff

4

Reno

Jean

5

Balasko

Josiane

6

Olivares

Gerardo

7

Emmerich

Roland

8

Kidmann

Nicole

9

Kubrick

Stanley

10

Cruise

Tom

11

McQuarrie

Christopher

12

Spielberg

Steven

13

Ford

Harrison

14

Abrams

JJ

15

Merad

Kad

16

Rich

Claude

17

Tavernier

Bertrand

18

Robert

Yves

19

Berri

Claude

20

Aghion

Gabriel

21

Darmon

Gérard

22

Laroque

Michèle

id_realisateur fait référence à id_personne de la table personna.

Contenu :

id_film

id_realisateur

titre

genre

annee

1

9

Eyes Wide Shut

drame

1999

2

11

Mission impossible 5

action

2015

3

12

Minority Report

SF

2002

4

12

Les dents de la mer

épouvante

1975

5

12

E.T. l'extraterrestre

SF

1982

6

12

Les aventuriers de l'Arche perdue

aventure

1981

7

14

Star Wars - Le Réveil de la Force

SF

2015

8

2

Bienvenue chez les Ch'tis

comédie

2008

9

17

La fille de D'Artagnan

cape et épée

1994

10

18

Un éléphant, ça trompe énormément

comédie

1976

11

20

Pédale dure

comédie

2004

Question

Créer une liste de dictionnaires présentant : nom et prénom de l'acteur, film dans lequel il joue, date du film, rôle dans le film, réalisateur du film.

La liste sera triée en ordre croissant des noms des acteurs et pour un même acteur en ordre décroissant des titres de film.

Vous créerez enfin un fichier csv contenant le résultat.

Indice

Un relecture de la page cours vous permettra à coût sûr de réussir !

Solution

1
import csv
2
3
def de_csv_vers_dico(fichier):
4
    """
5
    fichier -- nom d'un fichier csv (sans l'extension) 
6
7
    renvoie la liste de dictionnaires associée au fichier.
8
    """
9
    with open(fichier + '.csv', newline='') as fichiercsv:
10
        lecture = csv.DictReader(fichiercsv, delimiter=',')
11
        return [ligne for ligne in lecture]
12
13
def de_dico_vers_csv(liste, nomFichier):
14
    """
15
    liste -- liste de dictionnaires
16
    nomFichier -- nom du fichier créé (sans extension)
17
18
    crée le fichier csv contenant les contenus des dictionnaires 
19
    """
20
    with open(nomFichier + '.csv', 'w', newline='') as fichiercsv:
21
        entete = [clef for clef in liste[0].keys()]
22
        ecriture = csv.DictWriter(fichiercsv, fieldnames=entete)
23
        ecriture.writeheader()
24
        for ligne in liste:
25
            ecriture.writerow(ligne)
26
27
personnes = de_csv_vers_dico('personna')
28
jeux = de_csv_vers_dico('joue')
29
films = de_csv_vers_dico('film')
30
31
liste = []
32
for acteur in personnes:
33
    for joue in jeux:
34
            if joue['id_acteur'] == acteur['id_personne']:
35
                for film in films:
36
                    if joue['id_film'] == film['id_film']:
37
                        dico = {'nom': acteur['nom'],
38
                                'prenom': acteur['prenom'],
39
                                'film': film['titre'],
40
                                'annee': film['annee'],
41
                                'rôle': joue['role']
42
                        }
43
44
                        for realisateur in personnes:
45
                            if film['id_realisateur'] == realisateur['id_personne']:
46
                                dico['réalisateur'] =  realisateur['nom']+' '+realisateur['prenom']
47
48
                        liste.append(dico)
49
50
# on trie:
51
liste.sort(key= lambda x:x['film'].lower(), reverse= True)
52
liste.sort(key= lambda x:x['nom'].lower())
53
54
de_dico_vers_csv(liste, 'rolesActeurs')