N.S.I. WorkSpace P-Th-C,Première C4 – Administrer une table

C4 – Administrer une table

Categories:

Il s’agit de réaliser les opérations suivantes :

Ajouter un enregistrement à une table

Mettre à jour un enregistrement : modifier la valeur d’un ou plusieurs attributs

Supprimer un enregistrement

Construire une table

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 :

Consulter le document complet

1 – Télécharger ce fichier dont le nom est : speNSI_1re_Traitement_Donnees_Table_module4_Papillons_v2.csv

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")

Ajouter un enregistrement à une table

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 :

NymphalidaeMelitaea aureliaNickerl, 1850Mélitée des digitalesVUNT

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 :

NymphalidaeHyponephele nulipaO. Costa, 1830LouvetSTLC
Enregistrement erroné

Les données correctes sont les suivantes :

NymphalidaeHyponephele lupinaO. Costa, 1836LouvetNTLC
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 :

HesperiidaePyrgus sidaeEsper, 1784Hespérie à bandes jaunesLCLC
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 <<