import os import json class PersistentStorage: def __init__(self, storage_dir="storage"): """ Initialise l'environnement de stockage avec un répertoire dédié. :param storage_dir: Chemin du répertoire de stockage. """ self.storage_dir = storage_dir if not os.path.exists(storage_dir): os.makedirs(storage_dir) def _get_file_path(self, filename): """Renvoie le chemin complet d'un fichier dans le répertoire de stockage.""" return os.path.join(self.storage_dir, filename + ".json") def read(self, filename): """ Lit et retourne le contenu d'un fichier sous forme de dictionnaire. :param filename: Nom du fichier (sans extension). :return: Dictionnaire des données du fichier ou {} si le fichier est vide/inexistant. """ file_path = self._get_file_path(filename) try: with open(file_path, 'r', encoding='utf-8') as file: return json.load(file) except (FileNotFoundError, json.JSONDecodeError): return {} def write(self, filename, key, value): """ Ajoute ou met à jour une paire clé-valeur dans un fichier. :param filename: Nom du fichier (sans extension). :param key: Clé à ajouter ou mettre à jour. :param value: Valeur associée. """ data = self.read(filename) data[key] = value file_path = self._get_file_path(filename) with open(file_path, 'w', encoding='utf-8') as file: json.dump(data, file, indent=4, ensure_ascii=False) return data def delete(self, filename, key): """ Supprime une clé d'un fichier si elle existe. :param filename: Nom du fichier (sans extension). :param key: Clé à supprimer. """ data = self.read(filename) if key in data: del data[key] file_path = self._get_file_path(filename) with open(file_path, 'w', encoding='utf-8') as file: json.dump(data, file, indent=4, ensure_ascii=False) return data def list_keys(self, filename): """ Liste toutes les clés présentes dans un fichier. :param filename: Nom du fichier (sans extension). :return: Liste des clés. """ data = self.read(filename) return list(data.keys()) def query_all(self): """ Interroge tous les fichiers dans le répertoire de stockage et retourne leurs contenus. :return: Dictionnaire de tous les fichiers et leurs données. """ all_data = {} for file in os.listdir(self.storage_dir): if file.endswith(".json"): filename = os.path.splitext(file)[0] all_data[filename] = self.read(filename) return all_data # Exemple d'utilisation if __name__ == "__main__": # Initialisation de l'environnement storage = PersistentStorage() # Écriture de données storage.write("session1", "key1", "Valeur 1") storage.write("session1", "key2", "Valeur 2") storage.write("session2", "keyA", "Autre valeur") # Lecture des données print("Contenu de session1 :", storage.read("session1")) print("Contenu de session2 :", storage.read("session2")) # Suppression d'une clé #storage.delete("session1", "key1") print("Après suppression de key1 :", storage.read("session1")) # Liste des clés print("Clés dans session1 :", storage.list_keys("session1")) # Interrogation globale print("Contenu global :", storage.query_all())