11.6.tempfile — Generate temporary files and directories¶
Source code:Lib/tempfile.py
This module creates temporary files and directories. It works on allsupported platforms.TemporaryFile,NamedTemporaryFile,TemporaryDirectory, andSpooledTemporaryFile are high-levelinterfaces which provide automatic cleanup and can be used ascontext managers.mkstemp() andmkdtemp() are lower-level functions which require manual cleanup.
All the user-callable functions and constructors take additional arguments whichallow direct control over the location and name of temporary files anddirectories. Files names used by this module include a string ofrandom characters which allows those files to be securely created inshared temporary directories.To maintain backward compatibility, the argument order is somewhat odd; itis recommended to use keyword arguments for clarity.
The module defines the following user-callable items:
tempfile.TemporaryFile(mode='w+b',buffering=None,encoding=None,newline=None,suffix=None,prefix=None,dir=None)¶Return afile-like object that can be used as a temporary storage area.The file is created securely, using the same rules as
mkstemp(). It will be destroyed as soonas it is closed (including an implicit close when the object is garbagecollected). Under Unix, the directory entry for the file is either not created at all or is removedimmediately after the file is created. Other platforms do not supportthis; your code should not rely on a temporary file created using thisfunction having or not having a visible name in the file system.The resulting object can be used as a context manager (seeExamples). On completion of the context ordestruction of the file object the temporary file will be removedfrom the filesystem.
Themode parameter defaults to
'w+b'so that the file created canbe read and written without being closed. Binary mode is used so that itbehaves consistently on all platforms without regard for the data that isstored.buffering,encoding andnewline are interpreted as foropen().Thedir,prefix andsuffix parameters have the same meaning anddefaults as with
mkstemp().The returned object is a true file object on POSIX platforms. On otherplatforms, it is a file-like object whose
fileattribute is theunderlying true file object.The
os.O_TMPFILEflag is used if it is available and works(Linux-specific, requires Linux kernel 3.11 or later).Changed in version 3.5:The
os.O_TMPFILEflag is now used if available.
tempfile.NamedTemporaryFile(mode='w+b',buffering=None,encoding=None,newline=None,suffix=None,prefix=None,dir=None,delete=True)¶This function operates exactly as
TemporaryFile()does, except thatthe file is guaranteed to have a visible name in the file system (onUnix, the directory entry is not unlinked). That name can be retrievedfrom thenameattribute of the returnedfile-like object. Whether the name can beused to open the file a second time, while the named temporary file isstill open, varies across platforms (it can be so used on Unix; it cannoton Windows NT or later). Ifdelete is true (the default), the file isdeleted as soon as it is closed.The returned object is always a file-like object whosefileattribute is the underlying true file object. This file-like object canbe used in awithstatement, just like a normal file.
tempfile.SpooledTemporaryFile(max_size=0,mode='w+b',buffering=None,encoding=None,newline=None,suffix=None,prefix=None,dir=None)¶This function operates exactly as
TemporaryFile()does, except thatdata is spooled in memory until the file size exceedsmax_size, oruntil the file’sfileno()method is called, at which point thecontents are written to disk and operation proceeds as withTemporaryFile().The resulting file has one additional method,
rollover(), whichcauses the file to roll over to an on-disk file regardless of its size.The returned object is a file-like object whose
_fileattributeis either anio.BytesIOorio.StringIOobject (depending onwhether binary or textmode was specified) or a true fileobject, depending on whetherrollover()has been called. Thisfile-like object can be used in awithstatement, just likea normal file.Changed in version 3.3:the truncate method now accepts a
sizeargument.
tempfile.TemporaryDirectory(suffix=None,prefix=None,dir=None)¶This function securely creates a temporary directory using the same rules as
mkdtemp().The resulting object can be used as a context manager (seeExamples). On completion of the context or destructionof the temporary directory object the newly created temporary directoryand all its contents are removed from the filesystem.The directory name can be retrieved from the
nameattribute of thereturned object. When the returned object is used as a context manager, thenamewill be assigned to the target of theasclause inthewithstatement, if there is one.The directory can be explicitly cleaned up by calling the
cleanup()method.New in version 3.2.
tempfile.mkstemp(suffix=None,prefix=None,dir=None,text=False)¶Creates a temporary file in the most secure manner possible. There areno race conditions in the file’s creation, assuming that the platformproperly implements the
os.O_EXCLflag foros.open(). Thefile is readable and writable only by the creating user ID. If theplatform uses permission bits to indicate whether a file is executable,the file is executable by no one. The file descriptor is not inheritedby child processes.Unlike
TemporaryFile(), the user ofmkstemp()is responsiblefor deleting the temporary file when done with it.Ifsuffix is not
None, the file name will end with that suffix,otherwise there will be no suffix.mkstemp()does not put a dotbetween the file name and the suffix; if you need one, put it at thebeginning ofsuffix.Ifprefix is not
None, the file name will begin with that prefix;otherwise, a default prefix is used. The default is the return value ofgettempprefix()orgettempprefixb(), as appropriate.Ifdir is not
None, the file will be created in that directory;otherwise, a default directory is used. The default directory is chosenfrom a platform-dependent list, but the user of the application cancontrol the directory location by setting theTMPDIR,TEMP orTMPenvironment variables. There is thus no guarantee that the generatedfilename will have any nice properties, such as not requiring quotingwhen passed to external commands viaos.popen().If any ofsuffix,prefix, anddir are not
None, they must be the same type.If they are bytes, the returned name will be bytes instead of str.If you want to force a bytes return value with otherwise default behavior,passsuffix=b''.Iftext is specified, it indicates whether to open the file in binarymode (the default) or text mode. On some platforms, this makes nodifference.
mkstemp()returns a tuple containing an OS-level handle to an openfile (as would be returned byos.open()) and the absolute pathnameof that file, in that order.Changed in version 3.5:suffix,prefix, anddir may now be supplied in bytes in order toobtain a bytes return value. Prior to this, only str was allowed.suffix andprefix now accept and default to
Noneto causean appropriate default value to be used.
tempfile.mkdtemp(suffix=None,prefix=None,dir=None)¶Creates a temporary directory in the most secure manner possible. Thereare no race conditions in the directory’s creation. The directory isreadable, writable, and searchable only by the creating user ID.
The user of
mkdtemp()is responsible for deleting the temporarydirectory and its contents when done with it.Theprefix,suffix, anddir arguments are the same as for
mkstemp().mkdtemp()returns the absolute pathname of the new directory.Changed in version 3.5:suffix,prefix, anddir may now be supplied in bytes in order toobtain a bytes return value. Prior to this, only str was allowed.suffix andprefix now accept and default to
Noneto causean appropriate default value to be used.
tempfile.gettempdir()¶Return the name of the directory used for temporary files. Thisdefines the default value for thedir argument to all functionsin this module.
Python searches a standard list of directories to find one whichthe calling user can create files in. The list is:
The directory named by the
TMPDIRenvironment variable.The directory named by the
TEMPenvironment variable.The directory named by the
TMPenvironment variable.A platform-specific location:
On Windows, the directories
C:\TEMP,C:\TMP,\TEMP, and\TMP, in that order.On all other platforms, the directories
/tmp,/var/tmp, and/usr/tmp, in that order.
As a last resort, the current working directory.
The result of this search is cached, see the description of
tempdirbelow.
tempfile.gettempdirb()¶Same as
gettempdir()but the return value is in bytes.New in version 3.5.
tempfile.gettempprefix()¶Return the filename prefix used to create temporary files. This does notcontain the directory component.
tempfile.gettempprefixb()¶Same as
gettempprefix()but the return value is in bytes.New in version 3.5.
The module uses a global variable to store the name of the directoryused for temporary files returned bygettempdir(). It can beset directly to override the selection process, but this is discouraged.All functions in this module take adir argument which can be usedto specify the directory and this is the recommended approach.
tempfile.tempdir¶When set to a value other than
None, this variable defines thedefault value for thedir argument to the functions defined in thismodule.If
tempdirisNone(the default) at any call to any of the abovefunctions exceptgettempprefix()it is initialized following thealgorithm described ingettempdir().
11.6.1.Examples¶
Here are some examples of typical usage of thetempfile module:
>>>importtempfile# create a temporary file and write some data to it>>>fp=tempfile.TemporaryFile()>>>fp.write(b'Hello world!')# read data from file>>>fp.seek(0)>>>fp.read()b'Hello world!'# close the file, it will be removed>>>fp.close()# create a temporary file using a context manager>>>withtempfile.TemporaryFile()asfp:...fp.write(b'Hello world!')...fp.seek(0)...fp.read()b'Hello world!'>>># file is now closed and removed# create a temporary directory using the context manager>>>withtempfile.TemporaryDirectory()astmpdirname:...print('created temporary directory',tmpdirname)>>># directory and contents have been removed
11.6.2.Deprecated functions and variables¶
A historical way to create temporary files was to first generate afile name with themktemp() function and then create a fileusing this name. Unfortunately this is not secure, because a differentprocess may create a file with this name in the time between the calltomktemp() and the subsequent attempt to create the file by thefirst process. The solution is to combine the two steps and create thefile immediately. This approach is used bymkstemp() and theother functions described above.
tempfile.mktemp(suffix='',prefix='tmp',dir=None)¶Deprecated since version 2.3:Use
mkstemp()instead.Return an absolute pathname of a file that did not exist at the time thecall is made. Theprefix,suffix, anddir arguments are similarto those of
mkstemp(), except that bytes file names,suffix=Noneandprefix=Noneare not supported.Warning
Use of this function may introduce a security hole in your program. Bythe time you get around to doing anything with the file name it returns,someone else may have beaten you to the punch.
mktemp()usage canbe replaced easily withNamedTemporaryFile(), passing it thedelete=Falseparameter:>>>f=NamedTemporaryFile(delete=False)>>>f.name'/tmp/tmptjujjt'>>>f.write(b"Hello World!\n")13>>>f.close()>>>os.unlink(f.name)>>>os.path.exists(f.name)False
