tempfile
---生成临时文件和目录¶
源代码: Lib/tempfile.py
此模块创建临时文件和目录。它在所有支持的平台上工作。 TemporaryFile
, NamedTemporaryFile
, TemporaryDirectory
和 SpooledTemporaryFile
是提供自动清理的高级接口,可以用作上下文管理器。 mkstemp()
和 mkdtemp()
是需要手动清理的低级功能。
所有用户可调用函数和构造函数都采用其他参数,这些参数允许直接控制临时文件和目录的位置和名称。此模块使用的文件名包含一个随机字符字符串,允许在共享临时目录中安全地创建这些文件。为了保持向后兼容性,参数顺序有点奇怪;为了清晰起见,建议使用关键字参数。
该模块定义以下用户可调用项:
- tempfile.TemporaryFile(mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)¶
返回A file-like object 可以用作临时存储区。该文件是安全创建的,使用的规则与
mkstemp()
. 它将在关闭后立即销毁(包括在垃圾收集对象时隐式关闭)。在Unix下,文件的目录项要么根本不创建,要么在创建文件后立即删除。其他平台不支持此功能;您的代码不应依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见的名称。结果对象可以用作上下文管理器(请参见 实例 )在完成上下文或文件对象的销毁后,临时文件将从文件系统中删除。
这个 mode 参数默认为
'w+b'
这样就可以在不关闭的情况下读取和写入创建的文件。使用二进制模式是为了使它在所有平台上的行为一致,而不考虑存储的数据。 缓冲 , encoding , errors 和 newline 被解释为open()
.这个 dir , 前缀 和 后缀 参数的含义和默认值与
mkstemp()
.返回的对象是POSIX平台上的真实文件对象。在其他平台上,它是一个类似文件的对象,
file
属性是基础的true文件对象。这个
os.O_TMPFILE
如果该标志可用且有效,则使用该标志(特定于Linux,需要Linux内核3.11或更高版本)。提出一个 auditing event
tempfile.mkstemp
带着论证fullpath
.在 3.5 版更改: 这个
os.O_TMPFILE
如果可用,现在将使用标志。在 3.8 版更改: 补充 errors 参数。
- tempfile.NamedTemporaryFile(mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True, *, errors=None)¶
此函数的操作方式与
TemporaryFile()
除了保证文件在文件系统中有一个可见的名称(在Unix上,目录项没有取消链接)外,没有。该名称可以从name
返回的类似文件的对象的属性。当命名的临时文件仍处于打开状态时,是否可以再次使用该名称来打开该文件,这在不同的平台上有所不同(它可以在Unix上使用,不能在Windows NT或更高版本上使用)。如果 删除 为真(默认值),文件一关闭就会被删除。返回的对象始终是一个类似文件的对象,其file
属性是基础的true文件对象。此类似文件的对象可用于with
语句,就像普通文件一样。提出一个 auditing event
tempfile.mkstemp
带着论证fullpath
.在 3.8 版更改: 补充 errors 参数。
- tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=- 1, encoding=None, newline=None, suffix=None, prefix=None, dir=None, *, errors=None)¶
此函数的操作方式与
TemporaryFile()
是的,除非数据在内存中假脱机,直到文件大小超过 max_size 或者直到文件fileno()
方法,此时内容将写入磁盘,操作将继续进行TemporaryFile()
.结果文件有一个附加方法,
rollover()
,这将导致文件回滚到磁盘上的文件,而不考虑其大小。返回的对象是一个类似文件的对象,其
_file
属性是io.BytesIO
或io.TextIOWrapper
对象(取决于二进制还是文本 mode 或一个真正的文件对象,取决于rollover()
已被调用。此类似文件的对象可用于with
语句,就像普通文件一样。在 3.3 版更改: truncate方法现在接受
size
参数。在 3.8 版更改: 补充 errors 参数。
- tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)¶
此函数使用与
mkdtemp()
. 结果对象可以用作上下文管理器(请参见 实例 )完成上下文或销毁临时目录对象后,新创建的临时目录及其所有内容将从文件系统中删除。目录名可以从
name
返回对象的属性。当返回的对象用作上下文管理器时,name
将分配给as
中的子句with
声明,如果有。可以通过调用
cleanup()
方法。提出一个 auditing event
tempfile.mkdtemp
带着论证fullpath
.3.2 新版功能.
- tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)¶
以最安全的方式创建临时文件。在文件的创建过程中没有竞争条件,假定平台正确地实现了
os.O_EXCL
旗os.open()
. 只有创建用户ID才能读取和写入该文件。如果平台使用权限位指示文件是否可执行,则任何人都无法执行该文件。子进程不继承文件描述符。不像
TemporaryFile()
,的用户mkstemp()
负责删除临时文件。如果 后缀 不是
None
,文件名将以该后缀结尾,否则将没有后缀。mkstemp()
不在文件名和后缀之间加一个点;如果需要,请将其放在 后缀 .如果 前缀 不是
None
文件名将以该前缀开头;否则,将使用默认前缀。默认值是gettempprefix()
或gettempprefixb()
,视情况而定。如果 dir 不是
None
,文件将在该目录中创建;否则,将使用默认目录。默认目录是从依赖平台的列表中选择的,但是应用程序的用户可以通过设置 TMPDIR , TEMP 或 TMP 环境变量。因此,不能保证生成的文件名具有任何好的属性,例如,当通过os.popen()
.如果有 后缀 , 前缀 和 dir 不是
None
,它们必须是同一类型。如果它们是字节,则返回的名称将是字节而不是str。如果要强制使用字节返回值,否则将使用默认行为,则传递suffix=b''
.如果 text 指定且为true时,文件将以文本模式打开。否则,(默认情况下)文件将以二进制模式打开。
mkstemp()
将包含操作系统级句柄的元组返回到打开的文件(将由os.open()
)以及文件的绝对路径名。提出一个 auditing event
tempfile.mkstemp
带着论证fullpath
.在 3.5 版更改: 后缀 , 前缀 和 dir 现在可以按字节提供以获取字节返回值。在此之前,只允许使用str。 后缀 和 前缀 现在接受并默认为
None
使使用适当的默认值。在 3.6 版更改: 这个 dir 参数现在接受 path-like object .
- tempfile.mkdtemp(suffix=None, prefix=None, dir=None)¶
以最安全的方式创建临时目录。目录的创建中没有竞争条件。目录是可读的、可写的,并且只能通过创建用户ID进行搜索。
的用户
mkdtemp()
负责删除临时目录及其内容。这个 前缀 , 后缀 和 dir 参数与for相同
mkstemp()
.mkdtemp()
返回新目录的绝对路径名。提出一个 auditing event
tempfile.mkdtemp
带着论证fullpath
.在 3.5 版更改: 后缀 , 前缀 和 dir 现在可以按字节提供以获取字节返回值。在此之前,只允许使用str。 后缀 和 前缀 现在接受并默认为
None
使使用适当的默认值。在 3.6 版更改: 这个 dir 参数现在接受 path-like object .
- tempfile.gettempdir()¶
返回用于临时文件的目录名。这将定义 dir 此模块中所有函数的参数。
python搜索标准目录列表,以找到调用用户可以在其中创建文件的目录。名单如下:
目录由
TMPDIR
环境变量。目录由
TEMP
环境变量。目录由
TMP
环境变量。平台特定位置:
在Windows上,目录
C:\TEMP
,C:\TMP
,\TEMP
和\TMP
,按照这个顺序。在所有其他平台上,目录
/tmp
,/var/tmp
和/usr/tmp
,按照这个顺序。
作为最后手段,当前的工作目录。
此搜索的结果将被缓存,请参见
tempdir
下面。
- tempfile.gettempdirb()¶
等同于
gettempdir()
但返回值以字节为单位。3.5 新版功能.
- tempfile.gettempprefix()¶
返回用于创建临时文件的文件名前缀。这不包含目录组件。
- tempfile.gettempprefixb()¶
等同于
gettempprefix()
但返回值以字节为单位。3.5 新版功能.
该模块使用一个全局变量来存储用于返回临时文件的目录名。 gettempdir()
.它可以直接设置为覆盖选择过程,但不鼓励这样做。本模块中的所有功能 dir 可用于指定目录的参数,这是建议的方法。
- tempfile.tempdir¶
当设置为除
None
,此变量定义 dir 此模块中定义的函数的参数。如果
tempdir
是None
(默认)在调用上述任何函数时,除非gettempprefix()
它是按照中描述的算法初始化的。gettempdir()
.
实例¶
以下是一些典型的 tempfile
模块:
>>> import tempfile
# 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
>>> with tempfile.TemporaryFile() as fp:
... 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
>>> with tempfile.TemporaryDirectory() as tmpdirname:
... print('created temporary directory', tmpdirname)
>>>
# directory and contents have been removed
不推荐使用的函数和变量¶
创建临时文件的历史方法是首先使用 mktemp()
函数,然后使用此名称创建文件。很遗憾,这是不安全的,因为在调用 mktemp()
以及随后通过第一个进程创建文件的尝试。解决方案是结合这两个步骤并立即创建文件。此方法用于 mkstemp()
以及上述其他功能。
- tempfile.mktemp(suffix='', prefix='tmp', dir=None)¶
2.3 版后已移除: 使用
mkstemp()
相反。返回调用时不存在的文件的绝对路径名。这个 前缀 , 后缀 和 dir 参数类似于
mkstemp()
,除了字节文件名,suffix=None
和prefix=None
不支持。警告
使用此函数可能会在程序中引入一个安全漏洞。当你开始用它返回的文件名做任何事情时,其他人可能已经把你打得落花流水了。
mktemp()
使用方便替换为NamedTemporaryFile()
通过它delete=False
参数::>>> 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