tempfile 是 Python 提供的标准库模块,用于创建临时文件和临时目录,主要用于不希望在磁盘上永久保存的中间数据、缓存文件、测试数据等等。

该模块自动处理文件/目录的命名、位置、安全性,并在必要时自动清理,非常适合用在数据处理、单元测试、临时存储等场景中。

◆ ◆

核心概念

1、临时文件/目录位于系统默认的临时目录(如 /tmp/ 或 C:\Users\xxx\AppData\Local\Temp\)。

2、默认创建的临时文件具有唯一名称,避免命名冲突。

3、tempfile 创建的文件对象支持像普通文件那样读写。

4、临时文件可设置在关闭时自动删除或保留。

5、安全性高:文件权限默认仅限当前用户访问。

6、支持与 with 语句配合使用(上下文管理器)以自动清理。

◆ ◆

应用举例

例 1:使用 NamedTemporaryFile 写入和读取数据

import tempfile

with tempfile.NamedTemporaryFile(mode='w+', delete=False) as tmp:
    tmp.write("hello world")
    tmp.seek(0)
    print(tmp.read())
    print("文件路径:", tmp.name)

例 2:创建临时目录并写入文件

import tempfile, os

with tempfile.TemporaryDirectory() as tmpdir:
    print("创建临时目录:", tmpdir)
    filepath = os.path.join(tmpdir, "example.txt")
    with open(filepath, "w") as f:
        f.write("data")

例 3:使用 gettempdir() 获取系统临时目录

import tempfile

print("系统临时目录路径:", tempfile.gettempdir())

例 4:使用 mkstemp() 创建并写入临时文件

import tempfile, os

fd, path = tempfile.mkstemp()
with os.fdopen(fd, 'w') as f:
    f.write("temporary content")
print("创建文件:", path)
os.remove(path)  # 手动删除

例 5:使用 SpooledTemporaryFile 内存文件

import tempfile

with tempfile.SpooledTemporaryFile(max_size=100, mode='w+') as sp:
    sp.write("cache in memory")
    sp.seek(0)
    print(sp.read())

◆ ◆

常用函数速览

tempfile.NamedTemporaryFile(mode='w+b', delete=True, ...)

创建一个命名的临时文件,支持读写,可设置关闭时是否自动删除。

参数

mode:文件模式(如 'w+', 'rb')

delete:关闭文件时是否删除(默认 True)

返回:临时文件对象(含 .name 属性)

tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', ...)

创建一个临时文件,初始保存在内存中,超出指定大小后写入磁盘

参数

max_size:最大内存缓冲大小,单位为字节

返回:文件对象(行为与 NamedTemporaryFile 类似)

tempfile.TemporaryDirectory()

创建一个自动清理的临时目录。

返回:包含 .name 属性的目录对象,可用于上下文管理器

tempfile.gettempdir()

返回当前系统的临时目录路径。

返回:字符串路径

tempfile.mkstemp()

低级接口,返回一个独立的临时文件(不会自动删除)。

返回:文件描述符和完整路径组成的元组 (fd, path)

tempfile.mkdtemp()

低级接口,创建一个唯一命名的临时目录。

返回字符串路径(不会自动删除)

◆ ◆

补充说明

1、推荐使用 NamedTemporaryFile() 和 TemporaryDirectory() 配合 with 语句,简洁可靠。

2、使用 mkstemp() 等底层函数时需手动管理删除。

3、创建临时路径时请避免手动命名,以防冲突。

4、对于缓存、日志、测试数据等临时场景,tempfile 是优选工具。

5、若需更复杂的临时存储策略,可结合 shutil、os.path 使用。

点赞有美意,赞赏是鼓励