: tempfile模块)
tempfile模块详解一、基本概念二、常用函数函数常用参数:2.1、TemporaryFile()函数2.2、NamedTemporaryFile()函数2.3、TemporaryDirectory()函数2.4、SpooledTemporaryFile()函数三、低级API3.1、mkstemp()函数3.2、mkdtemp()函数四、全局配置五、案例5.1、生成临时文件供其他程序使用一、基本概念tempfile 是Python内置的临时文件/目录处理模块用来创建用完即删、自动清理、不会冲突的临时文件和文件夹。核心优势1、自动生成唯一文件名不会覆盖已有文件2、支持自动删除关闭即删3、无需手动管理文件删除二、常用函数函数 / 类用途是否自动删除TemporaryFile()临时文件无名字关闭自动删除NamedTemporaryFile()带名字的临时文件关闭自动删除SpooledTemporaryFile()内存临时文件高效关闭自动删除TemporaryDirectory()临时文件夹退出自动删除mkstemp()低级创建临时文件不自动删mkdtemp()低级创建临时目录不自动删函数常用参数:mode‘wb’指定文件的打开模式默认是 ‘wb’deleteTrue关闭后自动删除默认prefix‘tmp_’指定临时文件或目录名的前缀suffix‘.txt’指定临时文件或目录名的后缀dir‘./’指定临时文件或目录的存储路径。如果不指定则使用系统的临时文件目录通过 tempfile.gettempdir() 获取2.1、TemporaryFile()函数创建无名字临时文件关闭自动删除无法被其他进程访问1、完全匿名其他程序无法访问2、只支持二进制模式默认3、文件对象被关闭文件就会立即被销毁importtempfile# 默认模式为 wb创建临时文件二进制模式withtempfile.TemporaryFile()asf:f.write(bHello Temp File!)# 写入数据f.seek(0)# 回到文件开头print(f.read())# 退出with后文件自动被删除2.2、NamedTemporaryFile()函数创建带名字的临时文件可通过 name 属性获取路径关闭自动删除withtempfile.NamedTemporaryFile(modewt,encodingutf-8)asf:print(临时文件路径: ,f.name)# 可以拿到文件名f.write(临时文件内容)f.seek(0)print(f.read())# 退出with后文件自动被删除# 创建带后缀和前缀并且指定路径最后不删除的临时文件withtempfile.NamedTemporaryFile(suffix.log,prefixapp_,deleteFalse,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_pathos.path.join(tmpdir,test.txt)withopen(file_path,w)asf:f.write(hello)# 退出with后整个目录及创建的文件均被自动删除2.4、SpooledTemporaryFile()函数内存级临时文件数据首先会保存在内存中直到达到指定阈值 (max_size)才会被真正写入磁盘上的临时文件性能高。# max_size1024 表示数据超出 1KB 后才会写入磁盘withtempfile.SpooledTemporaryFile(max_size1024,modewt)asspooled:spooled.write(A*100)# 写入 100 字节仍在内存中print(spooled._rolled)# 输出 False表示数据仍在内存spooled.write(B*1024)# 写入 1024 字节此时总大小 1124 1024print(spooled._rolled)# 输出 True表示数据已转储到磁盘三、低级API3.1、mkstemp()函数创建临时文件不会自动删除返回文件描述符 路径fd,pathtempfile.mkstemp(suffix.log,prefixapp_,dir./)print(临时文件路径: ,path)# 手动关闭、手动删除os.close(fd)os.unlink(path)3.2、mkdtemp()函数创建临时目录不会自动删除tmp_dirtempfile.mkdtemp()print(tmp_dir)# 用完手动删importshutil shutil.rmtree(tmp_dir)四、全局配置# 设置全局临时文件目录tempfile.tempdir./my_temp# 设置全局前缀tempfile.templatemyapp_temp_%s# 之后创建的所有临时文件都会用这个配置withtempfile.NamedTemporaryFile()asf:print(f.name)# 获取系统默认临时文件夹路径print(tempfile.gettempdir())# 获取临时文件名模板print(tempfile.gettempprefix())五、案例5.1、生成临时文件供其他程序使用importtempfileimportsubprocessimportos# 创建一个带名字的临时脚本文件withtempfile.NamedTemporaryFile(modew,suffix.sh,deleteFalse)asf:f.write(#!/bin/bash\necho hello from temp script)f.flush()# 让其他程序使用这个临时文件resultsubprocess.run([bash,f.name],capture_outputTrue,textTrue)print(result.stdout)# 手动删除因为 deleteFalseos.unlink(f.name)print(临时文件已清理)