Python tempfile模块生成临时文件和临时目录


Posted in Python onSeptember 30, 2020

tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。

tempfile 模块中常用的函数,如表 1 所示。

表 1 tempfile 模块常用函数及功能

tempfile 模块函数 功能描述
tempfile.TemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None) 创建临时文件。该函数返回一个类文件对象,也就是支持文件 I/O。
tempfile.NamedTemporaryFile(mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True) 创建临时文件。该函数的功能与上一个函数的功能大致相同,只是它生成的临时文件在文件系统中有文件名。
tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None) 创建临时文件。与 TemporaryFile 函数相比,当程序向该临时文件输出数据时,会先输出到内存中,直到超过 max_size 才会真正输出到物理磁盘中。
tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None) 生成临时目录。
tempfile.gettempdir() 获取系统的临时目录。
tempfile.gettempdirb() 与 gettempdir() 相同,只是该函数返回字节串。
tempfile.gettempprefix() 返回用于生成临时文件的前缀名。
tempfile.gettempprefixb() 与 gettempprefix() 相同,只是该函数返回字节串。

提示:表中有些函数包含很多参数,但这些参数都具有自己的默认值,因此如果没有特殊要求,可以不对其传参。

tempfile 模块还提供了 tempfile.mkstemp() 和 tempfile.mkdtemp() 两个低级别的函数。上面介绍的 4 个用于创建临时文件和临时目录的函数都是高级别的函数,高级别的函数支持自动清理,而且可以与 with 语句一起使用,而这两个低级别的函数则不支持,因此一般推荐使用高级别的函数来创建临时文件和临时目录。

此外,tempfile 模块还提供了 tempfile.tempdir 属性,通过对该属性赋值可以改变系统的临时目录。

下面程序示范了如何使用临时文件和临时目录:

import tempfile
# 创建临时文件
fp = tempfile.TemporaryFile()
print(fp.name)
fp.write('两情若是久长时,'.encode('utf-8'))
fp.write('又岂在朝朝暮暮。'.encode('utf-8'))
# 将文件指针移到开始处,准备读取文件
fp.seek(0)
print(fp.read().decode('utf-8')) # 输出刚才写入的内容
# 关闭文件,该文件将会被自动删除
fp.close()
# 通过with语句创建临时文件,with会自动关闭临时文件
with tempfile.TemporaryFile() as fp:
# 写入内容
fp.write(b'I Love Python!')
# 将文件指针移到开始处,准备读取文件
fp.seek(0)
# 读取文件内容
print(fp.read()) # b'I Love Python!'
# 通过with语句创建临时目录
with tempfile.TemporaryDirectory() as tmpdirname:
print('创建临时目录', tmpdirname)

上面程序以两种方式来创建临时文件:

第一种方式是手动创建临时文件,读写临时文件后需要主动关闭它,当程序关闭该临时文件时,该文件会被自动删除。

第二种方式则是使用 with 语句创建临时文件,这样 with 语句会自动关闭临时文件。

上面程序最后还创建了临时目录。由于程序使用 with 语句来管理临时目录,因此程序也会自动删除该临时目录。

运行上面程序,可以看到如下输出结果:

C:\Users\admin\AppData\Local\Temp\tmphvehw9z1
两情若是久长时,又岂在朝朝暮暮。
b'I Love Python!'

创建临时目录C:\Users\admin\AppData\Local\Temp\tmp3sjbnwob

上面第一行输出结果就是程序生成的临时文件的文件名,最后一行输出结果就是程序生成的临时目录的目录名。需要注意的是,不要去找临时文件或临时文件夹,因为程序退出时该临时文件和临时文件夹都会被删除。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现带验证码网站的自动登陆实现代码
Jan 12 Python
python静态方法实例
Jan 14 Python
Python中用pycurl监控http响应时间脚本分享
Feb 02 Python
python中的格式化输出用法总结
Jul 28 Python
通过Pandas读取大文件的实例
Jun 07 Python
python实现自动登录
Sep 17 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
详解django2中关于时间处理策略
Mar 06 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
python机器人运动范围问题的解答
Apr 29 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
Aug 24 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 #Python
python如何实现word批量转HTML
Sep 30 #Python
Python识别验证码的实现示例
Sep 30 #Python
Python列表嵌套常见坑点及解决方案
Sep 30 #Python
python实现感知机模型的示例
Sep 30 #Python
python 实现关联规则算法Apriori的示例
Sep 30 #Python
Python之字典添加元素的几种方法
Sep 30 #Python
You might like
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Node.js 使用jade模板引擎的示例
2018/05/11 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
python中range()与xrange()用法分析
2016/09/21 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Django model反向关联名称的方法
2018/12/15 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
详解Python locals()的陷阱
2019/03/26 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
Python如何实现动态数组
2019/11/02 Python
Python之Class&Object用法详解
2019/12/25 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
python3注册全局热键的实现
2020/03/22 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
2020/05/12 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
大学本科生的个人自我评价
2013/12/09 职场文书
工作人员思想汇报
2014/01/09 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书