web-dev-qa-db-fra.com

Comment utiliser tempfile.NamedTemporaryFile ()?

Je travaille sur un script Python qui doit créer environ 50 fichiers temporaires distincts, qui sont tous fréquemment ajoutés au cours du script et fusionnés à la fin. Je suis sûr que le tempfile module peut faire ce dont j'ai besoin, mais je n'ai pas pu comprendre comment en lisant la documentation.

Je souhaite utiliser des fichiers temporaires - par opposition à des variables - pour conserver la mémoire système, car ces blocs de données grandissent à mesure que le script traite des dizaines de milliers d'autres fichiers.

Le morceau de code suivant est le hack que j'utilise actuellement pour créer ces fichiers (de façon intemporelle) dans un répertoire intemporel:

item = (string from another file)   # string must id file for future use
tmpfile = 'tmpfiles/' + item
if item not in totalitems:
   totalitems.add(item)
   with open(tmpfile, 'w') as itemfile:
      output = some stuff
      tmpfile.write(output)
else:
   with open(tmpfile, 'a') as itemfile:
      output = different stuff
      tmpfile.write(output)

Je pense que ce dont j'ai besoin est tempfile.NamedTemporaryFile(). Selon la documentation :

Ce nom peut être récupéré à partir du membre de nom de l'objet fichier.

Malheureusement, je ne comprends pas ce que cela signifie. J'ai juste besoin de pouvoir appeler chaque fichier à nouveau plus tard lorsque je rencontre à nouveau son "élément" correspondant dans les fichiers que je traite. Je suppose que c'est assez simple et je suis juste dense. Dans le cas où cela compte, j'ai des versions de ce script pour les deux Python 2.7.1 et 3.2.3. Je n'ai vraiment besoin que de l'un ou de l'autre pour travailler; j'ai créé les deux juste comme un apprentissage exercice.

33
Gregory

"Ce nom peut être récupéré à partir du membre de nom de l'objet fichier."

signifie que vous pouvez obtenir le nom du fichier temporaire créé comme suit:

In [4]: import tempfile

In [5]: tf = tempfile.NamedTemporaryFile()  
In [6]: tf.name  # retrieve the name of the temp file just created
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'

Remarque : Par défaut, le fichier sera supprimé à sa fermeture. Cependant, si le paramètre delete est False, le fichier n'est pas supprimé automatiquement. Voir documents Python à ce sujet pour plus d'informations.

Comme vous pouvez récupérer le nom de chacun des 50 fichiers temporaires que vous souhaitez créer, vous pouvez les enregistrer, par exemple, dans une liste, avant de les réutiliser plus tard (comme vous le dites). Veillez simplement à définir la valeur delete en conséquence afin que les fichiers ne disparaissent pas lorsque vous les fermez (au cas où vous prévoyez de les fermer, puis de les rouvrir ultérieurement).

J'ai expliqué comment créer des noms de fichiers temporaires plus en détail ici Meilleur moyen de générer des noms de fichiers aléatoires en Python

40
Levon