首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

tempfile

源代码: Lib / tempfile.py

该模块生成临时文件和目录。它适用于所有支持的平台。

在Python 2.3版本中,为了增强安全性,对该模块进行了大修。现在提供三种新的功能,NamedTemporaryFile()mkstemp(),和mkdtemp(),这应消除所有剩余需要使用不安全的mktemp()功能。由该模块创建的临时文件名不再包含进程ID; 而是使用六个随机字符的字符串。

此外,所有用户可调用的函数现在都有额外的参数,可以直接控制临时文件的位置和名称。不再需要使用全局tempdir模板变量。为了保持向后兼容性,论证顺序有点奇怪; 为了清楚起见,建议使用关键字参数。

该模块定义了以下用户可调用函数:

tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]])

返回可用作临时存储区域的文件类对象。该文件是使用创建的mkstemp()。一旦它关闭,它就会被销毁(包括当对象被垃圾收集时隐式关闭)。在Unix下,该文件的目录条目在文件创建后立即被删除。其他平台不支持这个; 您的代码不应该依赖使用此函数创建的临时文件,而该文件在文件系统中具有或不具有可见名称。

所述模式参数默认为'w+b'使得所创建的文件可以被读取并且没有被关闭写入。使用二进制模式,以便在所有平台上保持一致,而不考虑存储的数据。bufsize默认为-1,这意味着使用操作系统默认值。

目录前缀后缀的参数传递给mkstemp()

返回的对象是POSIX平台上的真实文件对象。在其他平台上,它是一个文件类对象,其file属性是底层的真实文件对象。这个类文件对象可以在一个with语句中使用,就像普通文件一样。

tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

这个函数的运行方式与此相同TemporaryFile(),除了该文件保证在文件系统中具有可见名称(在Unix上,目录项不是未链接的)。该名称可以从name返回的类文件对象的属性中检索。当命名的临时文件仍处于打开状态时,名称是否可用于第二次打开该文件,这在不同平台上有所不同(它可以在Unix上使用,不能在Windows NT或更高版本上使用)。如果删除为真(默认),则该文件在关闭后立即删除。

返回的对象始终是一个类文件对象,其file属性是底层的真实文件对象。这个类文件对象可以在一个with语句中使用,就像普通文件一样。

2.3版本的新功能。

2.6版新增功能:删除参数。

tempfile.SpooledTemporaryFile([max_size=0[, mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]])

TemporaryFile()除了数据在内存中被缓存直到文件大小超过max_sizefileno()调用文件的方法之前,此功能的运行方式与此相同,此时内容将写入磁盘并且操作将继续进行TemporaryFile()。此外,它的truncate方法不接受一个size参数。

生成的文件有一个额外的方法,rollover()它会导致文件无论大小如何都会转到磁盘上的文件。

返回的对象是一个类文件对象,其_file属性可以是StringIO对象也可以是真实文件对象,具体取决于是否rollover()已被调用。这个类文件对象可以在一个with语句中使用,就像普通文件一样。

2.6版本中的新功能。

tempfile.mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])

尽可能以最安全的方式创建一个临时文件。假设平台正确实现了该os.O_EXCL标志,文件创建时就没有竞争条件os.open()。该文件只能通过创建用户标识来读写。如果平台使用权限位来指示文件是否可执行,则该文件可由任何人执行。文件描述符不被子进程继承。

与此不同的是TemporaryFile(),用户mkstemp()负责在完成临时文件时删除临时文件。

如果指定了后缀,文件名将以该后缀结尾,否则不会有后缀。mkstemp()不在文件名和后缀之间加点; 如果你需要,把它放在后缀的开头。

如果指定了前缀,则文件名将以该前缀开头; 否则,使用默认的前缀。

如果指定了dir,则该文件将在该目录中创建; 否则,使用默认目录。默认目录是从依赖于平台的列表中选择的,但应用程序的用户可以通过设置TMPDIRTEMPTMP环境变量来控制目录位置。因此不能保证生成的文件名将具有任何好的属性,例如当通过外部命令传递时不需要引用os.popen()

如果指定了文本,则表示是否以二进制模式(默认)或文本模式打开文件。在某些平台上,这没有什么区别。

mkstemp()os.open()以该顺序返回一个包含操作系统级句柄的元组到一个打开的文件(将返回)以及该文件的绝对路径名。

2.3版本的新功能。

tempfile.mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]])

尽可能以最安全的方式创建临时目录。目录创建时没有竞争条件。该目录只能通过创建用户标识才可读,可写和可搜索。

完成后,用户mkdtemp()负责删除临时目录及其内容。

前缀后缀DIR参数是一样的mkstemp()

mkdtemp() 返回新目录的绝对路径名。

2.3版本的新功能。

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

自2.3版弃用:mkstemp()改为使用。

返回进行调用时不存在的文件的绝对路径名。该前缀后缀DIR参数是一样的mkstemp()

警告

使用此功能可能会在程序中引入安全漏洞。当你回过头来对文件名做任何事情时,其他人可能会殴打你。mktemp()用法可以轻松替换NamedTemporaryFile(),并传递delete=False参数:

>>> f = NamedTemporaryFile(delete=False)
>>> f
<open file '<fdopen>', mode 'w+b' at 0x384698>
>>> f.name
'/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0'
>>> f.write("Hello World!\n")
>>> f.close()
>>> os.unlink(f.name)
>>> os.path.exists(f.name)
False

该模块使用一个全局变量来告诉它如何构建一个临时名称。它们在首次调用上述任何函数时初始化。来电者可能会改变他们,但这是不鼓励的; 改为使用适当的函数参数。

tempfile.tempdir

当设置为除此之外的值时None,此变量为本模块中定义的所有函数定义dir参数的默认值。

如果tempdir未设置或None在任何上述函数调用时,Python搜索标准目录列表并将tempdir设置为主叫用户可以创建文件的第一个目录。列表为:

  1. TMPDIR环境变量命名的目录。
  2. TEMP环境变量命名的目录。
  3. TMP环境变量命名的目录。
  4. 平台特定的位置:
    • 在RiscOS上,由Wimp$ScrapDir环境变量命名的目录。
    • 在Windows中,目录C:\TEMPC:\TMP\TEMP,并\TMP按此顺序。
    • 在所有其他平台,目录/tmp/var/tmp以及/usr/tmp在这个顺序。
  5. 作为最后的手段,当前的工作目录。

tempfile.gettempdir()

返回当前选中的目录以创建临时文件。如果tempdir不是None,则返回其内容; 否则,执行上述搜索,并返回结果。

2.3版本的新功能。

tempfile.template

自2.0版弃用:gettempprefix()改为使用。

当设置为除此以外的值时None,此变量定义由返回的文件名的最后一个组件的前缀mktemp()。一个由六个随机字母和数字组成的字符串被附加到前缀以使文件名唯一。默认的前缀是tmp

此模块的旧版本用于在呼叫之后要求template设置Noneos.fork(); 从版本1.5.2开始这不是必需的。

tempfile.gettempprefix()

返回用于创建临时文件的文件名前缀。这不包含目录组件。使用此函数优于直接读取模板变量。

1.5.2版本的新功能。

扫码关注腾讯云开发者

领取腾讯云代金券