你写个脚本,下载几张图片,处理完就扔掉——结果发现 C:\Users\XXX\AppData\Local\Temp 里堆满了“tmp_20231105_abc.jpg”这类文件,半个月不清理,磁盘空间悄悄缩水。其实 Python 标准库里的 tempfile 模块,就是专治这种“临时变永久”的问题。
别再用 os.path.join(tempfile.gettempdir(), 'xxx') 手动拼路径了
手动拼路径不仅容易出错(比如忘记加斜杠、跨平台路径分隔符不一致),还可能让临时文件残留。直接用 tempfile 提供的接口,系统自动选目录、自动命名、还能帮你兜底清理。
创建即用的临时文件
需要立刻写点内容、用完就删?tempfile.NamedTemporaryFile 最省心:
import tempfile
with tempfile.NamedTemporaryFile(delete=False, suffix='.log') as f:
f.write(b'程序运行日志:成功加载配置')
print(f.name) # 输出类似:C:\Users\XXX\AppData\Local\Temp\tmp8x9z1a2b.log注意 delete=False ——否则 Windows 下文件一关就删不掉了;关掉上下文后,文件还在,你可以把它挪走或继续读。如果真想“用完即焚”,去掉这个参数,文件对象关闭时自动删除。
只想要个安全的临时目录
批量生成中间文件?先建个干净临时文件夹最稳妥:
import tempfile
import os
# 自动创建唯一命名的空目录
temp_dir = tempfile.mkdtemp()
print(temp_dir) # 如:C:\Users\XXX\AppData\Local\Temp\tmp7y2k9q1m
# 里面随便创建文件,处理完再删整个目录
with open(os.path.join(temp_dir, 'data.csv'), 'w') as f:
f.write('id,name\n1,张三')
# 用完调用 shutil.rmtree(temp_dir) 删除整目录比自己写 os.makedirs('temp_' + str(time.time())) 强多了——不会重名、不污染项目目录、路径也跨平台。
临时文件名,不占磁盘也能用
有时你只需要一个“合法又唯一”的文件名,但还没想好写啥内容。这时候用 tempfile.mkstemp():
import tempfile
fd, path = tempfile.mkstemp(suffix='.txt', prefix='backup_')
print(path) # 如:C:\Users\XXX\AppData\Local\Temp\backup_qw7r2t.txt
os.close(fd) # 记得关掉文件描述符
# 后续可随时 open(path, 'w') 写入它返回文件描述符和路径,适合需要精细控制底层 IO 的场景(比如配合 os.write())。
最后提醒一句:临时文件不是“不用管”,而是“交给标准库管”。用对 tempfile,脚本跑得安心,C 盘也松一口气。