Python Temporary Files and Directories
External
Internal
Auto-Deleting Temporary Files and Directories
TemporaryFile
, NamedTemporaryFile
and TemporaryDirectory
are classes that provide temporary files and directories that, in conjunction with the with
reserved word, are self-deleting when we the program gets out of scope.
Auto-Deleting Temporary File
A TemporaryFile
behaves "file-like", by exposing a file oriented-API to the underlying storage. NamedTemporaryFile
is similar to TemporaryFile
, except that the underlying file is guaranteed to have a visible name in the file system.
For NamedTemporaryFile
, the underlying file system path can be obtained with the name
property.
The underlying file system file will be deleted as soon as the NamedTemporaryFile
object is closed, if delete
is true
(the default). The object is automatically closed when the control exits the context:
from pathlib import Path
from tempfile import NamedTemporaryFile
content = 'something'
with NamedTemporaryFile(mode='w+t') as tf:
temp_file_path = tf.name
tf.write(content)
tf.flush()
# open the temporary file from the file system
with open(temp_file_path, 'r+t') as f:
content_from_file_system = f.read()
assert content == content_from_file_system
assert Path(temp_file_path).is_file()
#
# the file will be deleted out of scope
#
assert not Path(temp_file_path).is_file()
Auto-Deleting Temporary Directory
A TemporaryDirectory
creates a temporary directory on the filesystem. The underlying file system path can be obtained by wrapping the TemporaryDirectory
into a Path
instance. The underlying file system directory will be deleted as soon as the TemporaryDirectory
object is closed, if delete
is true
(the default). The object is automatically closed when the control exits the context:
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as td:
temp_dir_path = Path(td)
print(temp_dir_path.parent)
print(temp_dir_path.name)
assert temp_dir_path.is_dir()
#
# the directory will be deleted out of scope
#
assert not temp_dir_path.is_dir()
Temporary Files and Directories to be Deleted by the Caller
Temporary File to be Deleted by the Caller
Temporary Directory to be Deleted by the Caller
Create a named temporary file, write in it and return the name. The file is not automatically deleted after close()
, the caller will need to delete it:
import tempfile
with tempfile.NamedTemporaryFile(mode='w+t', delete=False) as t:
t.write(something)
return t.name