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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
Python双链表原理与实现方法详解
Feb 22 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
PyTorch中的C++扩展实现
Apr 02 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
Python卷积神经网络图片分类框架详解分析
Nov 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
实用函数2
2007/11/08 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
php依赖注入知识点详解
2019/09/23 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
浅析javascript的return语句
2015/12/15 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python实现简单的socket server实例
2015/04/29 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
如何运行带参数的python脚本
2019/11/15 Python
在TensorFlow中屏蔽warning的方式
2020/02/04 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
软件测试面试题
2015/10/21 面试题
《小松树和大松树》教学反思
2014/02/20 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
公司会议开幕词
2016/03/03 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python
在Python中如何使用yield
2021/06/07 Python
Python如何使用循环结构和分支结构
2022/04/13 Python