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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

一、基本概念

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、文件对象被关闭,文件就会立即被销毁

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

2.2、NamedTemporaryFile()函数

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

with tempfile.NamedTemporaryFile(mode='w+t', encoding='utf-8') as f:
    print("临时文件路径: ", f.name)  # 可以拿到文件名
    f.write("临时文件内容")
    f.seek(0)
    print(f.read())
# 退出with后,文件自动被删除

# 创建带后缀和前缀,并且指定路径,最后不删除的临时文件
with tempfile.NamedTemporaryFile(suffix='.log', prefix='app_', delete=False, dir="./") as f:
    print(f.name)  # 类似 /tmp/app_xxx.log
# 手动删除文件
os.remove(f.name)
print('临时文件已手动删除')

2.3、TemporaryDirectory()函数

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

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

2.4、SpooledTemporaryFile()函数

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

# max_size=1024 表示数据超出 1KB 后才会写入磁盘
with tempfile.SpooledTemporaryFile(max_size=1024, mode='w+t') as spooled:
    spooled.write('A' * 100)  # 写入 100 字节,仍在内存中
    print(spooled._rolled)   # 输出 False,表示数据仍在内存
    spooled.write('B' * 1024) # 写入 1024 字节,此时总大小 1124 > 1024
    print(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)
# 用完手动删
import shutil
shutil.rmtree(tmp_dir)

四、全局配置

# 设置全局临时文件目录
tempfile.tempdir = "./my_temp"

# 设置全局前缀
tempfile.template = "myapp_temp_%s"


# 之后创建的所有临时文件都会用这个配置
with tempfile.NamedTemporaryFile() as f:
    print(f.name)


# 获取系统默认临时文件夹路径
print(tempfile.gettempdir())

# 获取临时文件名模板
print(tempfile.gettempprefix())

五、案例

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

import tempfile
import subprocess
import os

# 创建一个带名字的临时脚本文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.sh', delete=False) as f:
    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("临时文件已清理")

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一位不知名民工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值