正确的使用Python临时文件

 更新时间:2021年03月26日 15:42:01   作者:技术火炬手  
这篇文章主要介绍了正确的使用Python临时文件,帮助大家更好的理解和学习使用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:

import os
import tempfile
 
# This will most certainly put you at risk
tmp = os.path.join(tempfile.gettempdir(), filename)
if not os.path.exists(tmp):
 with open(tmp, "w") file:
  file.write("defaults")

不正确2:

import os
import tempfile
 
open(tempfile.mktemp(), "w")

不正确3:

filename = "{}/{}.tmp".format(tempfile.gettempdir(), os.getpid())
open(filename, "w")

3.2 正确示例

正确1:

fd, path = tempfile.mkstemp()
try:
 with os.fdopen(fd, 'w') as tmp:
  # do stuff with temp file
  tmp.write('stuff')
finally:
 os.remove(path)

正确2:

# 句柄关闭,文件即删除
with tempfile.TemporaryFile() as tmp:
 # Do stuff with tmp
 tmp.write('stuff')

正确3:

tmp = tempfile.NamedTemporaryFile(delete=True)
try:
 # do stuff with temp
 tmp.write('stuff')
finally:
 tmp.close() # 文件关闭即删除

以上就是正确的使用Python临时文件的详细内容,更多关于使用Python临时文件的资料请关注脚本之家其它相关文章!

相关文章

  • Starship定制shell提示符实现信息自由

    Starship定制shell提示符实现信息自由

    这篇文章主要介绍了Starship定制shell提示符的实现,让你需要的所有信息触手可及,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • python pexpect ssh 远程登录服务器的方法

    python pexpect ssh 远程登录服务器的方法

    今天小编就为大家分享一篇python pexpect ssh 远程登录服务器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • python中的PywebIO模块制作一个数据大屏

    python中的PywebIO模块制作一个数据大屏

    这篇文章主要介绍了python中的PywebIO模块制作一个数据大屏,一个制作数据大屏的工具,非常的好用,100行的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解,需要的朋友可以参考一下
    2022-03-03
  • python drf各类组件的用法和作用

    python drf各类组件的用法和作用

    这篇文章主要介绍了python drf各类组件的用法和作用,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2021-01-01
  • python之PyQt按钮右键菜单功能的实现代码

    python之PyQt按钮右键菜单功能的实现代码

    这篇文章主要介绍了python PyQt按钮右键菜单功能的实现代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • python 实现A*算法的示例代码

    python 实现A*算法的示例代码

    本篇文章主要介绍了python 实现A*算法的示例代码,A*作为最常用的路径搜索算法,值得我们去深刻的研究,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python实现PDF和TIFF格式之间的相互转换

    Python实现PDF和TIFF格式之间的相互转换

    PDF是数据文档管理领域常用格式之一,主要用于存储和共享包含文本、图像、表格、链接等的复杂文档,而TIFF常见于图像处理领域, 在实际应用中,我们可能有时需要将PDF文件转换为TIFF图像,本文将介绍如何使用Python实现PDF和TIFF格式之间的相互转换,需要的朋友可以参考下
    2024-07-07
  • NumPy实现ndarray多维数组操作

    NumPy实现ndarray多维数组操作

    NumPy一个非常重要的作用就是可以进行多维数组的操作,这篇文章主要介绍了NumPy实现ndarray多维数组操作,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • pytorch_detach 切断网络反传方式

    pytorch_detach 切断网络反传方式

    这篇文章主要介绍了pytorch_detach 切断网络反传方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • python协程之yield和yield from实例详解

    python协程之yield和yield from实例详解

    Python在并发处理上不仅提供了多进程和多线程的处理,还包括了协程,下面这篇文章主要给大家介绍了关于python协程之yield和yield from的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论