Comment créer un répertoire temporaire et obtenir le chemin / nom du fichier en Python


Réponses:


211

Utilisez la mkdtemp()fonction du tempfilemodule:

import tempfile
import shutil

dirpath = tempfile.mkdtemp()
# ... do stuff with dirpath
shutil.rmtree(dirpath)

7
Si vous l'utilisez dans un test, assurez-vous de supprimer (shutil.rmtree) le répertoire car il n'est pas automatiquement supprimé après utilisation. "L'utilisateur de mkdtemp () est responsable de la suppression du répertoire temporaire et de son contenu une fois terminé." Voir: docs.python.org/2/library/tempfile.html#tempfile.mkdtemp
Niels Bom

98
En python3, vous pouvez le faire with tempfile.TemporaryDirectory() as dirpath:, et le répertoire temporaire sera automatiquement nettoyé à la sortie du gestionnaire de contexte. docs.python.org/3.4/library/…
Symétrique

41

Dans Python 3, TemporaryDirectory dans le module tempfile peut être utilisé.

Ceci vient directement du exemples :

import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
     print('created temporary directory', tmpdirname)
# directory and contents have been removed

Si vous souhaitez conserver le répertoire un peu plus longtemps, alors quelque chose comme ceci pourrait être fait (pas à partir de l'exemple):

import tempfile
import shutil

temp_dir = tempfile.TemporaryDirectory()
print(temp_dir.name)
# use temp_dir, and when done:
shutil.rmtree(temp_dir.name)

Comme l'a souligné @MatthiasRoelandts, la documentation indique également que "le répertoire peut être explicitement nettoyé en appelant la cleanup()méthode".


2
shutil.rmtree (temp_dir.name) n'est pas nécessaire.
sidcha

37

Pour développer une autre réponse, voici un exemple assez complet qui peut nettoyer le tmpdir même sur des exceptions:

import contextlib
import os
import shutil
import tempfile

@contextlib.contextmanager
def cd(newdir, cleanup=lambda: True):
    prevdir = os.getcwd()
    os.chdir(os.path.expanduser(newdir))
    try:
        yield
    finally:
        os.chdir(prevdir)
        cleanup()

@contextlib.contextmanager
def tempdir():
    dirpath = tempfile.mkdtemp()
    def cleanup():
        shutil.rmtree(dirpath)
    with cd(dirpath, cleanup):
        yield dirpath

def main():
    with tempdir() as dirpath:
        pass # do something here


3

Si je reçois correctement votre question, vous souhaitez également connaître les noms des fichiers générés dans le répertoire temporaire? Si oui, essayez ceci:

import os
import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    # generate some random files in it
     files_in_dir = os.listdir(tmp_dir)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.