Défi
Énoncé
Écrire une classe FichierTemporaire utilisable avec with. La méthode __enter__ crée un fichier vide dans le répertoire temporaire du système (via tempfile.mkstemp) et retourne le chemin du fichier. La méthode __exit__ supprime le fichier même si une exception est levée dans le bloc. Démontrer l'utilisation en écrivant une ligne dans le fichier à l'intérieur du bloc, puis en vérifiant que le fichier n'existe plus après la sortie.
Contraintes
- Python ≥ 3.6.
- Implémenter
__enter__et__exit__manuellement (sanscontextlib.contextmanager). __exit__reçoit(exc_type, exc_val, exc_tb); il doit supprimer le fichier dans tous les cas et renvoyerFalse(propagation des exceptions).- Utiliser
tempfile.mkstempoutempfile.mktemppour générer le nom du fichier. - Bibliothèque standard uniquement (
tempfile,os,pathlibautorisés). - Le programme affiche le chemin du fichier pendant le bloc, puis
"supprimé"ou"existe encore"après la sortie.
Exemple
import os, tempfile
class FichierTemporaire:
def __enter__(self):
fd, self.chemin = tempfile.mkstemp()
os.close(fd)
return self.chemin
def __exit__(self, exc_type, exc_val, exc_tb):
os.remove(self.chemin)
return False
with FichierTemporaire() as chemin:
print(f"fichier : {chemin}")
with open(chemin, "w") as f:
f.write("bonjour\n")
print("supprimé" if not os.path.exists(chemin) else "existe encore")
fichier : /tmp/tmpXXXXXX
supprimé
Le chemin exact varie ; seul "supprimé" est fixe sur la dernière ligne.