Python tempfile 临时目录、临时文件模块详解

介绍

tempfile 是 Python 内置的临时文件/目录处理模块,专门用于创建临时文件、临时目录,无需手动管理文件删除、路径冲突,程序退出时会自动清理,非常安全便捷。

作用

  1. 创建临时文件/文件夹,用完即删
  2. 自动处理跨平台路径(Windows/Linux/macOS 通用)
  3. 避免手动管理文件导致的残留、权限问题
  4. 适合缓存、中间数据、临时计算等场景

临时文件

TemporaryFile() / NamedTemporaryFile():创建后 程序关闭自动删除。

无文件名临时文件

无文件名临时文件(自动删除)

import tempfile

with tempfile.TemporaryFile(mode='w+t') as f:
    f.write("这是临时数据")
    f.seek(0)  # 回到文件开头
    print(f.read())  # 读取:这是临时数据

带文件名的临时文件

带文件名的临时文件(更实用,可被其他进程访问)

import tempfile

with tempfile.NamedTemporaryFile(mode='w+t', delete=True) as f:
    print("临时文件路径:", f.name)  # 打印系统自动生成的路径
    f.write("Hello tempfile")
    f.seek(0)
    print(f.read())

解释:

  • delete=True:关闭文件 自动删除(默认)
  • mode='w+t':文本模式;'w+b':二进制模式

手动控制删除的临时文件

设置 delete=False,文件不会自动删除,需要手动 os.unlink()。

import tempfile
import os

# 创建不自动删除的临时文件
f = tempfile.NamedTemporaryFile(delete=False)
print("永久临时文件路径:", f.name)
f.write(b"二进制数据")
f.close()

# 手动删除
os.unlink(f.name)

临时目录

存放多个临时文件

TemporaryDirectory():创建临时文件夹,退出自动删除整个目录。

import tempfile
import os

# 创建临时目录
with tempfile.TemporaryDirectory() as tmp_dir:
    print("临时目录路径:", tmp_dir)

    # 在临时目录里创建文件
    file_path = os.path.join(tmp_dir, "test.txt")
    with open(file_path, 'w') as f:
        f.write("临时目录里的文件")

# 退出 with 后,目录和文件全部自动删除

获取系统临时文件目录

查看当前系统默认的临时文件存放路径:

import tempfile

# 获取系统临时目录
print(tempfile.gettempdir())

# 获取临时文件命名前缀
print(tempfile.gettempprefix())

常用参数说明

参数 作用
mode 文件模式:w+t(文本) / w+b(二进制)
delete True=自动删除,False=保留
dir 指定临时文件存放目录
prefix / suffix 文件名前缀/后缀(如 prefix="data_")
encoding 文本编码(如 utf-8)

示例(自定义文件名前缀、后缀):

with tempfile.NamedTemporaryFile(prefix="myapp_", suffix=".log") as f:
    print(f.name)  # 类似 /tmp/myapp_xxxx.log

使用建议

  1. 优先用 with 语句:自动关闭+自动清理,最安全
  2. 跨平台无需关心路径:tempfile 自动适配系统
  3. 临时数据一定用临时文件:不要手动创建文件再删,容易残留
  4. 多文件用 TemporaryDirectory:统一管理,整体删除

总结

  1. tempfile 是 Python 内置模块,无需安装
  2. NamedTemporaryFile:创建带名字、自动删除的临时文件
  3. TemporaryDirectory:创建临时目录
  4. with 语句是最佳使用方式,安全无残留
  5. 适合缓存、中间计算、临时数据存储等场景

原文出处:/show_1GW3JGmPAd8W.html