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实现端口复用实例代码
Jul 03 Python
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python编程中的反模式实例分析
Dec 08 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python对象属性自动更新操作示例
Jun 15 Python
python让列表倒序输出的实例
Jun 25 Python
面向对象学习之pygame坦克大战
Sep 11 Python
python向图片里添加文字
Nov 26 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Python+OpenCV检测灯光亮点的实现方法
Nov 02 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 Python
用 Python 元类的特性实现 ORM 框架
May 19 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
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
js运动应用实例解析
2015/12/28 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
全面解读Python Web开发框架Django
2014/06/30 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
vscode调试django项目的方法
2020/08/06 Python
python中二分查找法的实现方法
2020/12/06 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
会员卡清退活动总结
2014/08/27 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书