Python创建临时文件和文件夹


Posted in Python onAugust 05, 2020

问题

你需要在程序执行时创建一个临时文件或目录,并希望使用完之后可以自动销毁掉。

解决方案

tempfile 模块中有很多的函数可以完成这任务。 为了创建一个匿名的临时文件,可以使用 tempfile.TemporaryFile

from tempfile import TemporaryFile

with TemporaryFile('w+t') as f:
  # Read/write to the file
  f.write('Hello World\n')
  f.write('Testing\n')

  # Seek back to beginning and read the data
  f.seek(0)
  data = f.read()

# Temporary file is destroyed

或者,如果你喜欢,你还可以像这样使用临时文件:

f = TemporaryFile('w+t')
# Use the temporary file
...
f.close()
# File is destroyed

TemporaryFile() 的第一个参数是文件模式,通常来讲文本模式使用 w+t ,二进制模式使用 w+b 。 这个模式同时支持读和写操作,在这里是很有用的,因为当你关闭文件去改变模式的时候,文件实际上已经不存在了。 TemporaryFile() 另外还支持跟内置的 open() 函数一样的参数。比如:

with TemporaryFile('w+t', encoding='utf-8', errors='ignore') as f:
  ...

在大多数Unix系统上,通过 TemporaryFile() 创建的文件都是匿名的,甚至连目录都没有。 如果你想打破这个限制,可以使用 NamedTemporaryFile() 来代替。比如:

from tempfile import NamedTemporaryFile

with NamedTemporaryFile('w+t') as f:
  print('filename is:', f.name)
  ...

# File automatically destroyed

这里,被打开文件的 f.name 属性包含了该临时文件的文件名。 当你需要将文件名传递给其他代码来打开这个文件的时候,这个就很有用了。 和 TemporaryFile() 一样,结果文件关闭时会被自动删除掉。 如果你不想这么做,可以传递一个关键字参数 delete=False 即可。比如:

with NamedTemporaryFile('w+t', delete=False) as f:
  print('filename is:', f.name)
  ...

为了创建一个临时目录,可以使用 tempfile.TemporaryDirectory() 。比如:

from tempfile import TemporaryDirectory

with TemporaryDirectory() as dirname:
  print('dirname is:', dirname)
  # Use the directory
  ...
# Directory and all contents destroyed

讨论

TemporaryFile()NamedTemporaryFile() TemporaryDirectory() 函数 应该是处理临时文件目录的最简单的方式了,因为它们会自动处理所有的创建和清理步骤。 在一个更低的级别,你可以使用 mkstemp() mkdtemp() 来创建临时文件和目录。比如:

>>> import tempfile
>>> tempfile.mkstemp()
(3, '/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-/tmp7fefhv')
>>> tempfile.mkdtemp()
'/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-/tmp5wvcv6'
>>>

但是,这些函数并不会做进一步的管理了。 例如,函数 mkstemp() 仅仅就返回一个原始的OS文件描述符,你需要自己将它转换为一个真正的文件对象。 同样你还需要自己清理这些文件。

通常来讲,临时文件在系统默认的位置被创建,比如 /var/tmp 或类似的地方。 为了获取真实的位置,可以使用 tempfile.gettempdir() 函数。比如:

>>> tempfile.gettempdir()
'/var/folders/7W/7WZl5sfZEF0pljrEB1UMWE+++TI/-Tmp-'
>>>

所有和临时文件相关的函数都允许你通过使用关键字参数 prefix suffixdir 来自定义目录以及命名规则。比如:

>>> f = NamedTemporaryFile(prefix='mytemp', suffix='.txt', dir='/tmp')
>>> f.name
'/tmp/mytemp8ee899.txt'
>>>

最后还有一点,尽可能以最安全的方式使用 tempfile 模块来创建临时文件。 包括仅给当前用户授权访问以及在文件创建过程中采取措施避免竞态条件。 要注意的是不同的平台可能会不一样。因此你最好阅读 官方文档 来了解更多的细节。

以上就是Python创建临时文件和文件夹的详细内容,更多关于Python临时文件和文件夹的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
python连接oracle数据库实例
Oct 17 Python
Python实现二分查找算法实例
May 26 Python
快速入手Python字符编码
Aug 03 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
在Pycharm中使用GitHub的方法步骤
Jun 13 Python
python生成特定分布数的实例
Dec 05 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
python定义类的简单用法
Jul 24 Python
python 用opencv实现霍夫线变换
Nov 27 Python
教你用python实现12306余票查询
Jun 30 Python
学习Python爬虫的几点建议
Aug 05 #Python
Python调用C/C++的方法解析
Aug 05 #Python
浅谈Python3中print函数的换行
Aug 05 #Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 #Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 #Python
Node.js 和 Python之间该选择哪个?
Aug 05 #Python
基于python图书馆管理系统设计实例详解
Aug 05 #Python
You might like
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
python实现简单爬虫功能的示例
2016/10/24 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
建筑经济管理专业求职信分享
2014/01/06 职场文书
车辆转让协议书
2014/04/15 职场文书
家长给学校的建议书
2014/05/15 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
2014年社区工作总结
2014/11/18 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript