Outils pour utilisateurs

Outils du site


nsi:tds:classe_relation_exercice

Création d'une relation (BDD) à partir d'un csv

Nous souhaitons implémenter une classe Relation qui permettra d'ouvrir un fichier .csv et de manipuler les données.

Attributs

_columns

_columns, un dict de forme {"name":type}

Par exemple : {"idActeur": int, "name": str, "age": int}

Cet attribut sera privé et fixé à la création de l'objet et ne pourra changer. Il permet d'indiquer les données attendues et leurs types.

_datas

_datas, privé, de type list. Chaque item dans la liste est un dict qui doit respecter le format de _columns.

Par exemple : {"idActeur": 12, "name": "Jean Rochefort", "age": 58}

_datas étant privé, on ne pourra pas ajouter ou retirer des données n'importe comment.

Méthodes

open_file

open_file(self, filename, separator). filename est le nom du fichier et separator est le séparateur de champs, par exemple , ou ;.

Précondition : le fichier existe, la première ligne contient l'entête avec les noms de colonnes, tous les noms de colonnes de _columns n'apparaissent, pas forcément dans le même ordre – l'ordre n'est pas garanti dans un dict.

is_empty

is_empty(self) qui renvoie True si l'objet ne contient aucune donnée.

Ce type de méthode est appelée prédicat.

save_to_file

saveToFile(self, filename, separator) qui enregistre le contenu de l'objet dans un fichier.

pop

pop(self) qui extrait et retourne le dernier item de _datas.

Précondition : _datas n'est pas vide.

insert

insert(self, data_item) ou data_item est un dict comme ceux de _datas. Est inseré à la suite de _datas.

Préconditions : data_item contient exactement les mêmes champs que _columns avec les bons types et l'item ajouté n'est pas un doublon d'un item déjà existant.

str

__str__(self) renvoie la ligne d'entête et les lignes de données comme elles apparaîtraient si on sauvegardait dans un fichier.

count

count(self) retournant la taille de _datas

select

select(column_name, value) renvoie un objet Relation dont les données sont constituées des lignes pour lesquelles la colonne de nom column_name` a la valeur value.

project

project(column_names) ou columnNames est un tuple précisant les noms de colonnes que l'on veut conserver. On obtient un objet Relation dont les données sont celles de l'objet de départ avec seulement les colonnes indiquées et sans doublons. Exemple :

# L'objet maRelation contient :
[
    { "idFilm":1, "Réalisateur":"Joe Good", "Titre":"Cowboy in the town", "année":1937},
    { "idFilm":2, "Réalisateur":"Luc Dupont", "Titre":"L'aventure", "année":1932},
    { "idFilm":3, "Réalisateur":"Joe Good", "Titre":"Ok cowboy", "année":1938},
]

# maRelation.project(("Réalisateur", "année")) renvoie l'objet contenant :
[
    { "Réalisateur":"Joe Good", "année":1937},
    { "Réalisateur":"Luc Dupont", "année":1932},
    { "Réalisateur":"Joe Good", "année":1938},
]
# Il ne doit pas y avoir deux lignes identiques.
nsi/tds/classe_relation_exercice.txt · Dernière modification : de goupillwiki