Python Temporary Files and Directories

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

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

tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)

Temporary Directory to be Deleted by the Caller

tempfile.mkdtemp(suffix=None, prefix=None, dir=None)