Movatterモバイル変換


[0]ホーム

URL:


Navigation

11.5.tempfile — Generate temporary files and directories

Source code:Lib/tempfile.py


This module generates temporary files and directories. It works on allsupported platforms. It provides three new functions,NamedTemporaryFile(),mkstemp(), andmkdtemp(), which shouldeliminate all remaining need to use the insecuremktemp() function.Temporary file names created by this module no longer contain the process ID;instead a string of six random characters is used.

Also, all the user-callable functions now take additional arguments whichallow direct control over the location and name of temporary files. It isno longer necessary to use the globaltempdir variable.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='',prefix='tmp',dir=None)

Return afile-like object that can be used as a temporary storage area.The file is created usingmkstemp(). 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 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.

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 are passed tomkstemp().

The returned object is a true file object on POSIX platforms. On otherplatforms, it is a file-like object whosefile attribute is theunderlying true file object. This file-like object can be used in awith statement, just like a normal file.

tempfile.NamedTemporaryFile(mode='w+b',buffering=None,encoding=None,newline=None,suffix='',prefix='tmp',dir=None,delete=True)

This function operates exactly asTemporaryFile() 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 thename attribute of the file 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 awith statement, just like a normal file.

tempfile.SpooledTemporaryFile(max_size=0,mode='w+b',buffering=None,encoding=None,newline=None,suffix='',prefix='tmp',dir=None)

This function operates exactly asTemporaryFile() 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_file attributeis either aio.BytesIO orio.StringIO object (depending onwhether binary or textmode was specified) or a true fileobject, depending on whetherrollover() has been called. Thisfile-like object can be used in awith statement, just likea normal file.

Changed in version 3.3:the truncate method now accepts asize argument.

tempfile.TemporaryDirectory(suffix='',prefix='tmp',dir=None)

This function creates a temporary directory usingmkdtemp()(the supplied arguments are passed directly to the underlying function).The resulting object can be used as a context manager (seeWith Statement Context Managers). 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 thename attribute of thereturned object. When the returned object is used as a context manager, thename will be assigned to the target of theas clause inthewith statement, if there is one.

The directory can be explicitly cleaned up by calling thecleanup() method.

New in version 3.2.

tempfile.mkstemp(suffix='',prefix='tmp',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 theos.O_EXCL flag 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.

UnlikeTemporaryFile(), the user ofmkstemp() is responsiblefor deleting the temporary file when done with it.

Ifsuffix is specified, 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 specified, the file name will begin with that prefix;otherwise, a default prefix is used.

Ifdir is specified, 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().

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.

tempfile.mkdtemp(suffix='',prefix='tmp',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 ofmkdtemp() is responsible for deleting the temporarydirectory and its contents when done with it.

Theprefix,suffix, anddir arguments are the same as formkstemp().

mkdtemp() returns the absolute pathname of the new directory.

tempfile.mktemp(suffix='',prefix='tmp',dir=None)

Deprecated since version 2.3:Usemkstemp() instead.

Return an absolute pathname of a file that did not exist at the time thecall is made. Theprefix,suffix, anddir arguments are the sameas formkstemp().

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=False parameter:

>>>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

The module uses two global variables that tell it how to construct atemporary name. They are initialized at the first call to any of thefunctions above. The caller may change them, but this is discouraged; usethe appropriate function arguments, instead.

tempfile.tempdir

When set to a value other thanNone, this variable defines thedefault value for thedir argument to all the functions defined in thismodule.

Iftempdir is unset orNone at any call to any of the abovefunctions, Python searches a standard list of directories and setstempdir to the first one which the calling user can create files in.The list is:

  1. The directory named by theTMPDIR environment variable.
  2. The directory named by theTEMP environment variable.
  3. The directory named by theTMP environment variable.
  4. A platform-specific location:
    • On Windows, the directoriesC:\TEMP,C:\TMP,\TEMP, and\TMP, in that order.
    • On all other platforms, the directories/tmp,/var/tmp, and/usr/tmp, in that order.
  5. As a last resort, the current working directory.
tempfile.gettempdir()

Return the directory currently selected to create temporary files in. Iftempdir is notNone, this simply returns its contents; otherwise,the search described above is performed, and the result returned.

tempfile.gettempprefix()

Return the filename prefix used to create temporary files. This does notcontain the directory component.

11.5.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

Table Of Contents

Previous topic

11.4.filecmp — File and Directory Comparisons

Next topic

11.6.glob — Unix style pathname pattern expansion

This Page

Quick search

Enter search terms or a module, class or function name.

Navigation

©Copyright 1990-2017, Python Software Foundation.
The Python Software Foundation is a non-profit corporation.Please donate.
Last updated on Sep 19, 2017.Found a bug?
Created usingSphinx 1.2.

[8]ページ先頭

©2009-2025 Movatter.jp