Situation à traiter : on dispose d’un fichier au format ‘csv’ contenant les données d’une table des espèces de papillons de jour observées en France, et dont voici un aperçu :
2 – Dans un éditeur/interpréteur de langage Python écrire les instructions qui permettent de construire une table – que l’on nommera ‘papillons’ – contenant les données de ce fichier. Il est précisé que la première ligne de ce fichier contient les intitulés des colonnes, et que les données sont séparées par des points-virgules (« ; »).Les données sont encodées en UTF-8. La table construite sera une liste de tuples.
Auto-correction
"""NSI - Première - Traitement de données en table"""
# =============================================================================
# ADMINISTRER une Table
# =============================================================================
def creation_table(fichier_csv):
# Etape 1 - Ouverture d'un flux de données
csv_charge = open(fichier_csv, mode="r", encoding="UTF-8")
# Etape 2 - Lecture de la première ligne et traitement des données
L = csv_charge.readline()
L = L.split(";") # découpage de la chaîne L en éléments de liste
L[-1] = L[-1].replace(chr(10), "") # suppression du caractère de fin de ligne (LF)
L = tuple(L) # conversion de la liste L en tuple
# Etape 3 - Lecture de toutes les lignes restantes et traitement des données
T = csv_charge.readlines() # T : liste de chaînes de caractères
for id in range(len(T)):
T[id] = T[id].split(";") # découpage de la chaîne T[id] en éléments de liste
T[id][-1] = T[id][-1].replace(chr(10), "") # suppression du caractère de fin de ligne (LF)
T[id] = tuple(T[id]) # conversion de la liste T1[id] en tuple
# Etape 4 - Fermeture du flux de données
csv_charge.close()
return L, T
# =============================================================================
# PROGRAMME PRINCIPAL
# =============================================================================
libelles, papillons = creation_table("speNSI_1re_Traitement_Donnees_Table_module4_Papillons_v2.csv")
Un spécialiste à constater qu’une espèce a été oubliée dans cette table (et donc dans le fichier ‘csv’). Il s’agit de :
Nymphalidae
Melitaea aurelia
Nickerl, 1850
Mélitée des digitales
VU
NT
3 – Écrire les instructions en langage Python qui permettent d’ajouter l’enregistrement contenant les données ci-dessus dans la table ‘papillons’.
Afin de préserver la cohérence de la table, on vérifiera que l’enregistrement que l’on veut ajouter est bien du même type que les autres enregistrements de la table et que le nombre de valeurs de cet enregistrement est identique à celui des autres enregistrements de la table.
Prévoir enfin un test de contrôle de l’ajout.
Autocorrection
# =============================================================================
# Fonction d'ajout d'un enregistrement
# =============================================================================
def ajout_enregistrement(table, occurrence):
"""Ajoute un enregistrement à une table.
Parameters
----------
table : liste de tuples
table de données.
occurrence : tuple
données à ajouter.
Returns
-------
bool
True si ajout réalisé, sinon False.
"""
# ----------------------------------------
# Vérifications : l'ajout est-il possible ?
# ----------------------------------------
# Condition de 'type'
if type(occurrence) != tuple:
return False
# Condition de nombre de colonnes
if len(occurrence) != len(table[0]):
return False
# Vérification de la cohérence entre nature et type des données de
# 'occurrence' avec ceux des autres enregistrements de la table
# ----------------------------------------
# Ajout de 'occurrence' à 'table'
# ----------------------------------------
table.append(occurrence)
return True
# =============================================================================
# PROGRAMME PRINCIPAL
# =============================================================================
libelles, papillons = creation_table("speNSI_1re_Traitement_Donnees_Table_module4_Papillons_v2.csv")
""" informations que l'on veut ajouter
Nymphalidae Melitaea aurelia Nickerl, 1850 Mélitée des digitales VU NT
"""
occurrence = ("Nymphalidae", "Melitaea aurelia", "Nickerl, 1850", "Mélitée des digitales", "VU", "NT")
assert ajout_enregistrement(papillons, occurrence)
assert papillons[-1] == occurrence
occurrence1 = ["Nymphalidae", "Melitaea aurelia", "Nickerl, 1850", "Mélitée des digitales", "VU", "NT"]
assert ajout_enregistrement(papillons, occurrence1) is False
assert papillons[-1] != occurrence1
occurrence2 = ("Melitaea aurelia", "Nickerl, 1850", "Mélitée des digitales", "VU", "NT")
assert ajout_enregistrement(papillons, occurrence2) is False
assert papillons[-1] != occurrence2
Mettre à jour un enregistrement
Un spécialiste à constater que les données l’enregistrement qui suit comportent des erreurs :
Nymphalidae
Hyponephele nulipa
O. Costa, 1830
Louvet
ST
LC
Enregistrement erroné
Les données correctes sont les suivantes :
Nymphalidae
Hyponephele lupina
O. Costa, 1836
Louvet
NT
LC
Enregistrement corrigé
4 – Écrire les instructions en langage Python qui permettent de modifier la valeur incorrecte des attributs de cet enregistrement appartenant à la table ‘papillons’.
Algorithme 1 >> Chercher la position de l’enregistrement à modifier dans la table >> Supprimer cet enregistrement >> Ajouter l’enregistrement contenant les données corrigées
Algorithme 2 >> Chercher la position de l’enregistrement à modifier dans la table >> Convertir cet enregistrement en type ‘list’ >> Modifier les valeurs de cet enregistrement >> Convertir cet enregistrement en type ‘tuple’
Autocorrection
# =============================================================================
# Fonction de mise à jour d'un enregistrement
# =============================================================================
def mise_a_jour_enregistrement(table, occ_suppr, occ_ajout):
"""Modifie les données d'un enregistrement.
Cherche 'occ_suppr' dans 'table',
supprime 'occ_suppr' et ajoute 'occ_ajout' à 'table'.
Parameters
----------
table : liste de tuples
Tables de données.
occ_suppr : tuple
enregistrement à supprimer.
occ_ajout : tuple
enregistrement à ajouter.
Returns
-------
bool
True si modification réalisée, sinon False.
"""
# ------------------------------
# Recherche de 'occ_suppr'
# ------------------------------
index = 0
while table[index] != occ_suppr:
index += 1
# cas où 'occ_suppr' n'existe pas dans 'table'
if index == len(table):
return False
# ------------------------------
# Suppression de 'occ_suppr'
# ------------------------------
table.pop(index)
# del(table[index])
# ------------------------------
# Ajout de 'occ_ajout'
# ------------------------------
return ajout_enregistrement(table, occ_ajout)
# =============================================================================
# PROGRAMME PRINCIPAL
# =============================================================================
libelles, papillons = creation_table("speNSI_1re_Traitement_Donnees_Table_module4_Papillons_v2.csv")
""" Informations que l'on veut modifier :
Nymphalidae Hyponephele nulipa O. Costa, 1830 Louvet ST LC
par :
Nymphalidae Hyponephele lupina O. Costa, 1836 Louvet NT LC
"""
occ_suppr = ("Nymphalidae", "Hyponephele nulipa", "O. Costa, 1830", "Louvet", "ST", "LC")
occ_ajout = ("Nymphalidae", "Hyponephele lupina", "O. Costa, 1830", "Louvet", "NT", "LC")
assert mise_a_jour_enregistrement(papillons, occ_suppr, occ_ajout)
occ_suppr1 = ("Nymphalidae", "Hyponephele nulipa", "O. Costa, 1831", "Louvet", "ST", "LC")
occ_ajout1 = ("Nymphalidae", "Hyponephele lupina", "O. Costa, 1830", "Louvet", "NT", "LC")
assert mise_a_jour_enregistrement(papillons, occ_suppr1, occ_ajout1) is False
occ_suppr2 = ("Nymphalidae", "Hyponephele nulipa", "O. Costa, 1830", "Louvet", "ST", "LC")
occ_ajout2 = ("Nymphalidae", "Hyponephele lupina", "O. Costa, 1830", "Louvet", "NT")
assert mise_a_jour_enregistrement(papillons, occ_suppr, occ_ajout) is False
Supprimer un enregistrement
Un spécialiste a constaté qu’une espèce figure plusieurs fois dans la table. Il s’agit de :
Hesperiidae
Pyrgus sidae
Esper, 1784
Hespérie à bandes jaunes
LC
LC
Enregistrement en double
5 – Écrire les instructions en langage Python qui permettent de supprimer de la table ‘papillons’ tous les enregistrements superflux. Attention à ne pas supprimer tous les enregistrements qui correspondent à celui recherché ! Prévoir un contrôle de l’existence dans la table de l’enregistrement que l’on veut supprimer. Et prévoir une vérification de la suppression réalisée.
Autocorrection
Sauvegarder la table après modifications
6 – Ecrire les instructions en langage Python qui permettent de conserver les données de la table ‘papillons’ dans un fichier au format ‘csv’. Ce fichier sera nommé : speNSI_1re_Traitement_Donnees_Table_module4_Papillons_v3.csv
Des difficultés ? Coup de pouce !
Réponse possible et auto-évaluation de la réponse personnelle
Article sous licence << Cliquez pour plus d’informations <<