Aller au contenu principal
U/
Idiomes
python

Écrire un context manager pour un fichier temporaire

Implémenter une classe Python avec __enter__ et __exit__ qui crée un fichier temporaire à l'entrée et le supprime automatiquement à la sortie du bloc with.

30 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

É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 (sans contextlib.contextmanager).
  • __exit__ reçoit (exc_type, exc_val, exc_tb) ; il doit supprimer le fichier dans tous les cas et renvoyer False (propagation des exceptions).
  • Utiliser tempfile.mkstemp ou tempfile.mktemp pour générer le nom du fichier.
  • Bibliothèque standard uniquement (tempfile, os, pathlib autorisé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.

Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.