ajout de mémoire avec fichier

This commit is contained in:
Foufure13
2025-01-10 23:13:37 +01:00
parent b1ac5c7506
commit 08c63b576c
15 changed files with 292 additions and 465 deletions
+103
View File
@@ -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())