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 相关文章推荐
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
Jan 22 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
Python的Flask框架中web表单的教程
Apr 20 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
python使用openpyxl库修改excel表格数据方法
May 03 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
如何一键升级Python所有包
Nov 05 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
python manim实现排序算法动画示例
Aug 14 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
php长字符串定义方法
2012/07/12 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
python中文编码问题小结
2014/09/28 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
python配置文件写入过程详解
2019/10/19 Python
python 并发下载器实现方法示例
2019/11/22 Python
Python底层封装实现方法详解
2020/01/22 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
存储过程的优点有哪些
2012/09/27 面试题
远东集团网络工程师面试题
2014/10/20 面试题
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
一封普通求职者的求职信
2013/11/20 职场文书
剪彩仪式主持词
2014/03/19 职场文书
青年文明号创建承诺
2014/03/31 职场文书
党在我心中演讲稿
2014/09/02 职场文书
股东合作协议书
2014/09/12 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
计划生育责任书
2015/05/09 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python