ajout de mémoire avec fichier
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user