news 2026/7/21 9:36:22

python3从入门到精通(十三): tempfile模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python3从入门到精通(十三): tempfile模块

tempfile模块详解

  • 一、基本概念
  • 二、常用函数
    • 函数常用参数:
    • 2.1、TemporaryFile()函数
    • 2.2、NamedTemporaryFile()函数
    • 2.3、TemporaryDirectory()函数
    • 2.4、SpooledTemporaryFile()函数
  • 三、低级API
    • 3.1、mkstemp()函数
    • 3.2、mkdtemp()函数
  • 四、全局配置
  • 五、案例
    • 5.1、生成临时文件供其他程序使用

一、基本概念

tempfile 是Python内置的临时文件/目录处理模块,用来创建用完即删、自动清理、不会冲突的临时文件和文件夹。

核心优势:
1、自动生成唯一文件名,不会覆盖已有文件
2、支持自动删除(关闭即删)
3、无需手动管理文件删除

二、常用函数

函数 / 类用途是否自动删除
TemporaryFile()临时文件(无名字)关闭自动删除
NamedTemporaryFile()带名字的临时文件关闭自动删除
SpooledTemporaryFile()内存临时文件(高效)关闭自动删除
TemporaryDirectory()临时文件夹退出自动删除
mkstemp()低级创建临时文件不自动删
mkdtemp()低级创建临时目录不自动删

函数常用参数:

  • mode=‘w+b’:指定文件的打开模式,默认是 ‘w+b’
  • delete=True:关闭后自动删除(默认)
  • prefix=‘tmp_’:指定临时文件或目录名的前缀
  • suffix=‘.txt’:指定临时文件或目录名的后缀
  • dir=‘./’:指定临时文件或目录的存储路径。如果不指定,则使用系统的临时文件目录(通过 tempfile.gettempdir() 获取)

2.1、TemporaryFile()函数

创建无名字临时文件,关闭自动删除,无法被其他进程访问
1、完全匿名,其他程序无法访问
2、只支持二进制模式(默认)
3、文件对象被关闭,文件就会立即被销毁

importtempfile# 默认模式为 'w+b',创建临时文件(二进制模式)withtempfile.TemporaryFile()asf:f.write(b"Hello Temp File!")# 写入数据f.seek(0)# 回到文件开头print(f.read())# 退出with后,文件自动被删除

2.2、NamedTemporaryFile()函数

创建带名字的临时文件,可通过 name 属性获取路径,关闭自动删除

withtempfile.NamedTemporaryFile(mode='w+t',encoding='utf-8')asf:print("临时文件路径: ",f.name)# 可以拿到文件名f.write("临时文件内容")f.seek(0)print(f.read())# 退出with后,文件自动被删除# 创建带后缀和前缀,并且指定路径,最后不删除的临时文件withtempfile.NamedTemporaryFile(suffix='.log',prefix='app_',delete=False,dir="./")asf:print(f.name)# 类似 /tmp/app_xxx.log# 手动删除文件os.remove(f.name)print('临时文件已手动删除')

2.3、TemporaryDirectory()函数

创建临时文件夹,退出时整个目录会递归的自动删除

importtempfileimportoswithtempfile.TemporaryDirectory()astmpdir:print(f'临时目录已创建:{temp_dir}')# 在临时目录里创建文件file_path=os.path.join(tmpdir,"test.txt")withopen(file_path,'w')asf:f.write("hello")# 退出with后,整个目录及创建的文件均被自动删除

2.4、SpooledTemporaryFile()函数

内存级临时文件,数据首先会保存在内存中,直到达到指定阈值 (max_size),才会被真正写入磁盘上的临时文件,性能高。

# max_size=1024 表示数据超出 1KB 后才会写入磁盘withtempfile.SpooledTemporaryFile(max_size=1024,mode='w+t')asspooled:spooled.write('A'*100)# 写入 100 字节,仍在内存中print(spooled._rolled)# 输出 False,表示数据仍在内存spooled.write('B'*1024)# 写入 1024 字节,此时总大小 1124 > 1024print(spooled._rolled)# 输出 True,表示数据已转储到磁盘

三、低级API

3.1、mkstemp()函数

创建临时文件,不会自动删除,返回文件描述符 + 路径

fd,path=tempfile.mkstemp(suffix='.log',prefix='app_',dir='./')print("临时文件路径: ",path)# 手动关闭、手动删除os.close(fd)os.unlink(path)

3.2、mkdtemp()函数

创建临时目录,不会自动删除

tmp_dir=tempfile.mkdtemp()print(tmp_dir)# 用完手动删importshutil shutil.rmtree(tmp_dir)

四、全局配置

# 设置全局临时文件目录tempfile.tempdir="./my_temp"# 设置全局前缀tempfile.template="myapp_temp_%s"# 之后创建的所有临时文件都会用这个配置withtempfile.NamedTemporaryFile()asf:print(f.name)# 获取系统默认临时文件夹路径print(tempfile.gettempdir())# 获取临时文件名模板print(tempfile.gettempprefix())

五、案例

5.1、生成临时文件供其他程序使用

importtempfileimportsubprocessimportos# 创建一个带名字的临时脚本文件withtempfile.NamedTemporaryFile(mode='w',suffix='.sh',delete=False)asf:f.write("#!/bin/bash\necho 'hello from temp script'")f.flush()# 让其他程序使用这个临时文件result=subprocess.run(['bash',f.name],capture_output=True,text=True)print(result.stdout)# 手动删除(因为 delete=False)os.unlink(f.name)print("临时文件已清理")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 9:35:43

高级爵士舞《Take My Hand》模块化学习与工程化训练指南

在技术领域,命令行界面(CLI)通常与系统管理、开发工具和自动化脚本相关联。然而,将CLI的概念与舞蹈网课相结合,可以引申出一种高效、结构化的学习方式,即通过一系列清晰的指令和步骤来掌握复杂的舞蹈动作。…

作者头像 李华
网站建设 2026/7/21 9:35:26

护脊床垫选购指南:科学支撑脊椎健康

1. 护脊床垫的核心价值解析 脊椎健康问题已经成为现代人最常见的亚健康状态之一。根据临床数据显示,约75%的都市人群存在不同程度的脊椎问题,其中近半数与睡眠姿势不当直接相关。护脊床垫(如昂首床垫)正是针对这一痛点设计的专业寝…

作者头像 李华
网站建设 2026/7/21 9:33:55

Unlock Music Electron:打破音乐枷锁,让加密音频重获自由

Unlock Music Electron:打破音乐枷锁,让加密音频重获自由 【免费下载链接】unlock-music-electron Unlock Music Project - Electron Edition 在Electron构建的桌面应用中解锁各种加密的音乐文件 项目地址: https://gitcode.com/gh_mirrors/un/unlock-…

作者头像 李华
网站建设 2026/7/21 9:33:29

NomNom存档编辑器终极指南:解锁《无人深空》无限可能

NomNom存档编辑器终极指南:解锁《无人深空》无限可能 【免费下载链接】NomNom NomNom is the most complete savegame editor for NMS but also shows additional information around the data youre about to change. You can also easily look up each item indiv…

作者头像 李华
网站建设 2026/7/21 9:33:17

3步合并B站缓存视频:Android离线观看完整解决方案

3步合并B站缓存视频:Android离线观看完整解决方案 【免费下载链接】BilibiliCacheVideoMerge 🔥🔥Android上将bilibili缓存视频合并导出为mp4,支持安卓5.0 ~ 13,视频挂载弹幕播放(Android consolidates and exports th…

作者头像 李华