Python Temporary Files and Directories: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 7: Line 7:
<code>TemporaryFile</code>, <code>NamedTemporaryFile</code> and <code>TemporaryDirectory</code> are classes that provide temporary files and directories that, in conjunction with the <code>[[Python_Context_Manager#Overview|with]]</code> reserved word, are self-deleting when we the program gets out of scope.
<code>TemporaryFile</code>, <code>NamedTemporaryFile</code> and <code>TemporaryDirectory</code> are classes that provide temporary files and directories that, in conjunction with the <code>[[Python_Context_Manager#Overview|with]]</code> reserved word, are self-deleting when we the program gets out of scope.
==Auto-Deleting Temporary File==
==Auto-Deleting Temporary File==
The underlying file system file will be deleted as soon as the <code>TemporaryFile</code> object is closed.
 
A <code>TemporaryFile</code> behaves "file-like", by exposing a file oriented-API to the underlying storage. <code>NamedTemporaryFile</code> is similar to <code>TemporaryFile</code>, except that the underlying file is guaranteed to have a visible name in the file system.
 
For <code>NamedTemporaryFile</code>, the underlying file system path can be obtained with the <code>name</code> property.
 
The underlying file system file will be deleted as soon as the <code>NamedTemporaryFile</code> object is closed, if <code>delete</code> is <code>true</code> (the default). The object is automatically closed when the control exits the context:
 
<syntaxhighlight lang='py'>
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()
</syntaxhighlight>


==Auto-Deleting Temporary Directory==
==Auto-Deleting Temporary Directory==

Revision as of 20:36, 13 June 2023

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

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