Loading [MathJax]/jax/output/HTML-CSS/fonts/STIX-Web/fontdata.js

Tables - fusion voitures

L'exécution de la cellule de code ci-dessous permet d'ouvrir un fichier CSV et d'en transférer le contenu dans deux tables :

  • table_proprietaires contient des enregistrements qui donnent les identités des propriétaires de véhicules identifiés grâce à leur VIN (Vehicle Identification Number),
  • table_voitures contient des enregistrements qui permettent d'identifier visuellement des véhicules identifiés grâce à leur VIN.

On sait par ailleurs que tous les VIN figurant dans table_voitures figurent aussi dans table_proprietaires.

Entrée[ ]:

Question 1 :

En étudiant le code ci-dessus, répondre aux questions suivantes :

  • Quelle fonction du langage python permet d'ouvrir un fichier ?

  • Lors de l'appel de fonction, quel argument indique à python que le fichier est à ouvrir en lecture et pas en écriture ?

  • Quel est l'encodage du fichier CSV utilisé : utf-8 ou ascii ou iso-8859-1?

  • Quel est le séparateur du fichier CSV utilisé : ; ou , ou : ?

  • Pourquoi est-il important de fermer le fichier une fois qu'on a fini de l'utiliser ?

Solution
  • La fonction du langage python qui permet d'ouvrir un fichier est : open

  • L'argument qui indique à python que le fichier est à ouvrir en lecture est : 'r'

  • L'encodage du fichier CSV utilisé est : 'utf-8'

  • Le séparateur du fichier CSV utilisé est : ','

  • Il est important de fermer le fichier une fois qu'on a fini de l'utiliser pour libérer le fichier, c'est à dire pour que les autres applications puissent l'utiliser à leur tour si besoin.

Question 2 :

En exécutant deux instructions bien choisies, déterminer combien d'enregistrements (c-à-d de lignes) contiennent ces tables.

Entrée[ ]:
Solution
len(table_proprietaires) 
Entrée[ ]:
Solution
len(table_voitures) 

Remarque : Pour faciliter l'affichage des tables, vous pouvez utiliser la fonction afficher :

Entrée[ ]:
Entrée[ ]:

Question 3 :

Compléter la séquence d'instructions ci-dessous afin de fusionner les deux tables dans une troisième table.

Entrée[ ]:
Solution

Première version (on fait une boucle pour ajouter les informations du propriétaire):

import copy                                                          #<---- spécifique versions 1 et 2

table_fusion = []

for voiture in table_voitures:
    for proprietaire in table_proprietaires:
        if proprietaire['vin'] == voiture['vin']:
            enregistrement = copy.deepcopy(voiture)                  #<---- spécifique versions 1 et 2

            for key, val in proprietaire.items():                    #<---- spécifique version 1
                enregistrement[key] = val                            #<---- spécifique version 1
                
            table_fusion.append(enregistrement)
            break

afficher(table_fusion)

Seconde version (on ajoute « à la main » les informations du propriétaire):

import copy                                                          #<---- spécifique versions 1 et 2

table_fusion = []

for voiture in table_voitures:
    for proprietaire in table_proprietaires:
        if proprietaire['vin'] == voiture['vin']:
            enregistrement = copy.deepcopy(voiture)                  #<---- spécifique versions 1 et 2
            
            enregistrement['nom'] = proprietaire['nom']              #<---- spécifique versions 2 et 3
            enregistrement['ville'] = proprietaire['ville']          #<---- spécifique versions 2 et 3
            enregistrement['etat'] = proprietaire['etat']            #<---- spécifique versions 2 et 3
            
            table_fusion.append(enregistrement)
            break

afficher(table_fusion)

Troisième version (on ajoute « à la main » les informations de la voiture et celles du propriétaire):

table_fusion = []

for voiture in table_voitures:
    for proprietaire in table_proprietaires:
        if proprietaire['vin'] == voiture['vin']:
            enregistrement = dict()                                  #<---- spécifique version 3
            
            enregistrement['vin'] = voiture['vin']                   #<---- spécifique version 3
            enregistrement['marque'] = voiture['marque']             #<---- spécifique version 3
            enregistrement['modele'] = voiture['modele']             #<---- spécifique version 3
            enregistrement['annee'] = voiture['annee']               #<---- spécifique version 3
            enregistrement['couleur'] = voiture['couleur']           #<---- spécifique version 3           

            enregistrement['nom'] = proprietaire['nom']              #<---- spécifique versions 2 et 3
            enregistrement['ville'] = proprietaire['ville']          #<---- spécifique versions 2 et 3
            enregistrement['etat'] = proprietaire['etat']            #<---- spécifique versions 2 et 3
                
            table_fusion.append(enregistrement)
            break

afficher(table_fusion)