Question or problem about Python programming:
how to create a temporary directory and get the path / file name in python
How to solve the problem:
Solution 1:
Use the mkdtemp()
function from the tempfile
module:
import tempfile import shutil dirpath = tempfile.mkdtemp() # ... do stuff with dirpath shutil.rmtree(dirpath)
Solution 2:
In Python 3, TemporaryDirectory in the tempfile module can be used.
This is straight from the examples:
import tempfile with tempfile.TemporaryDirectory() as tmpdirname: print('created temporary directory', tmpdirname) # directory and contents have been removed
If you would like to keep the directory a bit longer, then something like this could be done (not from the example):
import tempfile temp_dir = tempfile.TemporaryDirectory() print(temp_dir.name) # use temp_dir, and when done: temp_dir.cleanup()
The documentation also says that “On completion of the context or destruction of the temporary directory object the newly created temporary directory and all its contents are removed from the filesystem.” So at the end of the program, for example, Python will clean up the directory if it wasn’t explicitly removed. Python’s unittest
may complain of ResourceWarning: Implicitly cleaning up <TemporaryDirectory...
if you rely on this, though.
Solution 3:
To expand on another answer, here is a fairly complete example which can cleanup the tmpdir even on 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
Solution 4:
In python 3.2 and later, there is a useful contextmanager for this in the stdlib https://docs.python.org/3/library/tempfile.html#tempfile.TemporaryDirectory
Solution 5:
If I get your question correctly, you want to also know the names of the files generated inside the temporary directory?
If so, try this:
import os import tempfile with tempfile.TemporaryDirectory() as tmp_dir: # generate some random files in it files_in_dir = os.listdir(tmp_dir)