NSI Première

Les données structurées - Activité 1

*Création d'un fichier csv*

Vous allez créer un fichier csv nommé films.csv avec une dizaine de films
(utiliser les 4 films cités ci-dessous et ajouter les autres de votre choix)
en utilisant les descripteurs suivants :

image_film_csv.png

✎ Méthode

  • On le crée dans libre office calc
  • On l'enregistre au format csv avec la virgule comme séparateur et Jeu de caractère Unicode (UTF-8)
  • Vous devez ensuite ajouter le fichier : films.csv (icone liste des fichiers annexes)

*Python et les fichiers csv*

✎ Exercices 1

Executer ce script

In [2]:
import csv 
liste = [] 
with open("films.csv", 'r') as data:
    lecteur = csv.reader(data, delimiter=",") 
    for ligne in lecteur:
        liste.append(ligne)
print(liste)
[['id', 'titre', 'année', 'longueur', 'action', 'animation', 'comédie', 'drame', 'documentaire', 'romance', 'science-fiction', 'fantastique'], ['1', "un acte d'amour", '1953', '108', '0', '0', '0', '1', '0', '1', '0', '0'], ['2', 'un air de famille', '1996', '110', '0', '0', '1', '0', '0', '0', '0', '0'], ['3', 'un air si pur…', '1997', '106', '0', '0', '1', '1', '0', '0', '0', '0'], ['4', 'un aller simple', '1971', '118', '0', '0', '0', '1', '0', '0', '0', '0'], ['5', 'Il était une fois en Amérique', '1984', '229', '0', '0', '0', '1', '0', '0', '0', '0'], ['6', 'Gladiator', '2000', '155', '1', '0', '0', '0', '0', '0', '0', '0'], ['7', 'Tu ne tueras point', '2016', '140', '0', '0', '0', '1', '0', '0', '0', '0'], ['8', 'Le Roi Lion', '1994', '89', '0', '1', '1', '0', '0', '0', '0', '0'], ['9', 'The Dark Knight', '2008', '152', '1', '0', '0', '0', '0', '0', '0', '0'], ['10', 'Coco', '2017', '105', '0', '1', '0', '0', '0', '0', '0', '1']]
  1. Quelle est la structure de la variable liste?
La variable liste est un tableau (appelé liste dans Python)
  1. Que contient : liste[0] ?
liste[0] contient les descripteurs (ou champs) du fichier csv.
In [6]:
# Vérifier votre réponse
liste[0]
Out[6]:
['id', 'titre', 'année', 'longueur', 'action', 'animation', 'comédie', 'drame', 'documentaire', 'romance', 'science-fiction', 'fantastique']
  1. Peut-on faire la même opération avec un fichier dont le séparateur serait un pointvirgule?
Oui, on peut utliser d'autres séparateurs
  1. Afficher la 3ème ligne du fichier ?
In [5]:
# Votre réponse ici
liste[2]
Out[5]:
['2', 'un air de famille', '1996', '110', '0', '0', '1', '0', '0', '0', '0', '0']
  1. Afficher le titre et l’année du film de la 3ème ligne du fichier ?
In [10]:
# votre réponse ici
liste[2][1] , liste[2][2]
Out[10]:
('un air de famille', '1996')
In [7]:
print("titre :", liste[2][1],"- année :", liste[2][2])
titre : un air de famille - année : 1996
  1. Comment sait-on dans quel genre est répertorié un film ?
In [9]:
# votre réponse ici
titre = 'Gladiator'
for element in liste:
    if element[1] == titre:
        for i in range(4 , len(element)):
            if int(element[i]) == 1:
                print(liste[0][i])
action

✎ Exercices 2

Voici un script qui permet d’afficher les titres de films dont l’année de sortie est supérieure à 2000

  1. Executer ce script
In [10]:
# chargement de la bibliothèque 
import csv 
liste = [] # liste vide
# chargement du fichier csv dans une liste 
with open("films.csv", 'r') as data:
    lecteur = csv.reader(data, delimiter=",") 
    for ligne in lecteur:
        liste.append(ligne)
    print(liste[0]) # affichage de la première ligne    
# suppression de la première ligne (sinon la boucle plante...) 
liste.pop(0)
# affiche les films produits après 2000 
for ligne in liste:
    if int(ligne[2]) > 2000: 
         print(ligne[1])
['id', 'titre', 'année', 'longueur', 'action', 'animation', 'comédie', 'drame', 'documentaire', 'romance', 'science-fiction', 'fantastique']
Tu ne tueras point
The Dark Knight
Coco
  1. Inspirez-vous de ce script pour faire afficher les films par genre
In [1]:
# chargement de la bibliothèque 
import csv 
liste = [] # liste vide
# chargement du fichier csv dans une liste 
with open("films.csv", 'r') as data:
    lecteur = csv.reader(data, delimiter=",") 
    for ligne in lecteur:
        liste.append(ligne)
        

for i in range(4, len(liste[0])):
    print("--", liste[0][i], "--")
    for j in range(1, len(liste)):
        if int(liste[j][i]) == 1:
            print(liste[j][1])
-- action --
Gladiator
The Dark Knight
-- animation --
Le Roi Lion
Coco
-- comédie --
un air de famille
un air si pur…
Le Roi Lion
-- drame --
un acte d'amour
un air si pur…
un aller simple
Il était une fois en Amérique
Tu ne tueras point
-- documentaire --
-- romance --
un acte d'amour
-- science-fiction --
-- fantastique --
Coco

*Avec une liste de dictionnaires*

✎ Exercices 3

Le script ci-dessous charge une liste de dictionnaires dans la variable liste.
Executer le

In [5]:
import csv
liste = [] # liste vide
# chargement du fichier csv dans une liste de dictionnaires
with open("films.csv",'r') as data:
    lecteur = csv.DictReader(data,delimiter = ",")
    liste = [dict(elt) for elt in lecteur]
print(liste[0]) # affichage de la première ligne
{'id': '1', 'titre': "un acte d'amour", 'année': '1953', 'longueur': '108', 'action': '0', 'animation': '0', 'comédie': '0', 'drame': '1', 'documentaire': '0', 'romance': '1', 'science-fiction': '0', 'fantastique': '0'}
  1. Quelles sont les clés de ces dictionnaires ?
Les clé sont les descripteurs du fichier 'csv', on les retrouvent dans chaque dictionnaire.
In [20]:
# Vérifier votre réponse
for cle in liste[0].keys():
    print(cle)
id
titre
année
longueur
action
animation
comédie
drame
documentaire
romance
science-fiction
fantastique
In [8]:
print(list(liste[1].keys()))
['id', 'titre', 'année', 'longueur', 'action', 'animation', 'comédie', 'drame', 'documentaire', 'romance', 'science-fiction', 'fantastique']
  1. Comment atteindre le titre du film dans le 3ème dictionnaire ?
In [10]:
# Votre réponse ici
liste[3]['longueur']  # liste[2] est un DICTIONNAIRE (le 3ème)
Out[10]:
'118'
  1. Quel code faut-il écrire pour vérifier si un film est présent dans la liste ?
In [11]:
# Votre réponse ici
for element in liste:  # element est un dictionnaire
    if element['titre'] == 'un air si pur…':
        print(True)
True
In [11]:
# Votre réponse ici
for element in liste:  # element est un dictionnaire
    if 'un air si pur…'in element.values():
        print(True)
    
True
  1. Quel code faut-il écrire pour faire afficher tous les films dont la durée est supérieure à 2h ?
In [12]:
# Votre réponse ici
for element in liste:  # element est un dictionnaire
    if int(element['longueur']) > 120:
        print(element['titre'])
Il était une fois en Amérique
Gladiator
Tu ne tueras point
The Dark Knight