104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
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())
|