Vous pouvez envisager d'utiliser un tempfile.SpooledTemporaryFile
qui vous offre le meilleur des deux mondes en ce sens qu'il crée initialement un fichier virtuel temporaire basé sur la mémoire, mais passe automatiquement à un fichier physique basé sur le disque si les données conservées en mémoire dépassent une taille donnée.
Une autre caractéristique intéressante est que (lors de l'utilisation de la mémoire), il utilisera automatiquement soit une carte à puce soit une carte à puce. io.BytesIO
ou io.StringIO
en fonction de ce que mode
est utilisé, ce qui vous permet de lire et d'écrire des chaînes Unicode ou des données binaires (octets).
La seule difficulté réside dans le fait que vous devez éviter de fermer le fichier entre les étapes, car cela entraînerait sa suppression de la mémoire ou du disque. Au lieu de cela, vous pouvez simplement revenir au début avec un fichier seek(0)
l'appel de la méthode.
Lorsque vous avez terminé le fichier et que vous le fermez, il est automatiquement supprimé du disque si la quantité de données qu'il contient a entraîné son transfert vers un fichier physique.