Table des matières
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.
