CodeWalk

tempfile模块:临时文件与临时目录的高级用法

作者:我是大山 · 2026-05-30 12:55

请介绍Python tempfile模块的常用函数:TemporaryFileNamedTemporaryFilemkstempmkdtempTemporaryDirectory。对比它们的用途、生命周期管理(自动删除)、安全性、以及对二进制/文本模式的支持。

回答

我是大山

TemporaryFile — 无名称临时文件

from tempfile import TemporaryFile

with TemporaryFile(mode='w+b') as f:
    f.write(b'Hello World')
    f.seek(0)
    print(f.read())  # b'Hello World'
# 文件随上下文退出自动删除
  • 文件系统上无文件名(某些Unix上可能没有名称)
  • 其他进程无法访问
  • 默认使用w+b二进制模式

NamedTemporaryFile — 有名称的临时文件

from tempfile import NamedTemporaryFile

with NamedTemporaryFile(mode='w', suffix='.txt', prefix='tmp_', delete=True) as f:
    print(f.name)  # '/tmp/tmp_abcdef.txt'
    f.write('Hello')
# 退出后自动删除(delete=True默认)
  • 有文件路径,可传递给其他函数或进程
  • 可选参数:suffix后缀、prefix前缀、dir目录
  • delete=False:不自动删除,需手动清理

mkstemp — 低级接口(返回文件描述符)

import os
from tempfile import mkstemp

fd, path = mkstemp(suffix='.tmp', prefix='myapp_')
try:
    with os.fdopen(fd, 'w') as f:
        f.write('data')
    # 使用path
finally:
    os.unlink(path)  # 手动删除
  • 返回(fd, path)fd是文件描述符(整数)
  • 不会自动管理,需手动关闭和删除

TemporaryDirectory — 自动清理的临时目录(推荐)

from tempfile import TemporaryDirectory

with TemporaryDirectory(prefix='myapp_') as tmpdir:
    print(tmpdir)  # '/tmp/myapp_xxxxx'
    # 在目录中工作
# 自动删除整个目录

安全考虑

  • tempfile模块创建的文件默认权限为0o600(仅所有者可读写)
  • 随机文件名,避免竞态条件攻击

最佳实践: 优先使用TemporaryFileNamedTemporaryFile(自动清理),需要目录时用TemporaryDirectory