正确的使用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() # 文件关闭即删除
(资源库 www.zyku.net)
原文链接:https://www.jb51.net/article/208417.htm
上一篇:Python 执行函数的九种方法
栏 目:Python教程
下一篇:PyPDF2的使用
本文标题:正确的使用Python临时文件
本文地址:https://www.zyku.net/python/2125.html
您可能感兴趣的文章
- 03-28Python 执行函数的九种方法
- 03-27Python中如何实现链式调用
- 03-27Python API 邮件发送测试
- 03-27Python命令行如何运行文件
- 03-27Python 实现单向链表,和单向链表的反转
- 09-07Python2与Python3关于字符串编码处理的差别总结
- 05-20520使用Python实现“我爱你”表白
- 05-10python调用API接口实现登录短信验证
- 05-10python对接ihuyi实现短信验证码发送
- 06-05CentOS 6.5下安装Python 3.5.2(与Python2并存)
- 07-07vivos10隐藏软件教程
- 10-25红米Note11怎么局部截屏
- 01-28小米note9全面屏手势关闭方法
- 08-02discuz门户网站添加栏目,发布编辑文章
- 06-18帝国CMS7.5版新增支持HTTPS传输协议,更
- 03-15华为手机取消下滑智慧搜索方法
- 02-17bootstrap table 数据表格行内修改的
- 12-23HTML <br> 标签
- 01-18趣舞蹈-趣舞蹈应用软件功能介绍
- 12-29彩映转文字-彩映转文字应用软件功能介
最近更新
阅读排行
猜你喜欢
- 08-10mooda退出登录教程
- 03-16Centos7下搭建KVM虚拟机的方法
- 02-28Linux中添加ftp用户,并设置相应的权限
- 08-13picsart修眉教程介绍
- 03-17详解MySQL主从复制实战 - 基于GTID的
- 07-23jQuery版本下载
- 01-13长截图拼图-长截图拼图应用软件功能介
- 09-19荣耀play3参与鸿蒙系统教程介绍
- 12-16华为mate30pro怎么打开AI屏幕随心
- 04-24Python连接字符串(join %)