当前位置: 首页 > 后端技术 > Python

如何正确使用Python临时文件

时间:2023-03-26 13:27:11 Python

总结:临时文件通常用于保存无法保存在内存中的数据,或者传递给必须从文件中读取的外部程序。一般我们会在/tmp目录下生成唯一的文件名,但是安全地创建临时文件并不是那么简单,需要遵循很多规则。本文分享自华为云社区《Python 临时文件那些事》,原作者:技术火炬手。1.前言临时文件通常用于保存不能存储在内存中的数据,或者传递给必须从文件中读取的外部程序。一般我们会在/tmp目录下生成唯一的文件名,但是安全地创建临时文件并不是那么简单,需要遵循很多规则。永远不要尝试自己做,而是使用库函数来做。还要小心清理临时文件。临时文件带来的最大问题是文件名可以被预测,导致恶意用户预测临时文件名,从而创建软链接劫持临时文件。2、Tempfile模块介绍Tempfile一般用于创建临时文件。该模块常用的库函数如下:tempfile.mktemp#不安全,禁止使用tempfile.mkstemp#随机创建tmp文件,默认创建的文件在/tmp目录下,当然也可以指定(可用)tempfile.TemporaryFile#在内存中创建一个文件,该文件不会存入磁盘,关闭后会被删除(可用)tempfile.NamedTemporaryFile(delete=True)当delete=True时,函数同上,为False时,会存入磁盘(可以使用)3.实例下面介绍安全和不安全的临时文件创建方式。3.1错误示例:错误1:importosimporttempfile#这肯定会让您处于危险之中tmp=os.path.join(tempfile.gettempdir(),filename)ifnotos.path.exists(tmp):withopen(tmp,"w")文件:file.write("defaults")不正确2:importosimporttempfileopen(tempfile.mktemp(),"w")不正确3:filename="{}/{}.tmp".format(tempfile.gettempdir(),os.getpid())open(filename,"w")3.2正确示例正确1:fd,path=tempfile.mkstemp()try:withos.fdopen(fd,'w')astmp:#处理临时文件tmp.write('stuff')finally:os.remove(path)correct2:#handleisclosed,thefileisdeletedwithtempfile.TemporaryFile()astmp:#Dostuffwithtmptmp.write('stuff')是正确的3:tmp=tempfile.NamedTemporaryFile(delete=True)try:#dostuffwithtemptmp.write('stuff')finally:tmp.close()#文件关闭并删除点击关注,第一时间了解华为云的新鲜技术~