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 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
详解python多线程之间的同步(一)
Apr 03 Python
python3实现表白神器
Apr 09 Python
python实现的生成word文档功能示例
Aug 23 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
Python的pygame安装教程详解
Feb 10 Python
django的403/404/500错误自定义页面的配置方式
May 21 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 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
php a simple smtp class
2007/11/26 PHP
php不用正则验证真假身份证
2013/11/06 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
浅析Jquery操作select
2016/12/13 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
express express-session的使用小结
2018/12/12 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
银行贷款承诺书
2014/03/29 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
2014年行政工作总结
2014/11/19 职场文书
合作意向协议书
2015/01/29 职场文书
美术教师求职信范文
2015/03/20 职场文书
升职自我推荐信范文
2015/03/25 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python