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二分法实现实例
Nov 21 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
python中web框架的自定义创建
Sep 08 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
python实现在线翻译
Jun 18 Python
python数据抓取3种方法总结
Feb 07 Python
用Python提取PDF表格的方法
Apr 11 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
JS中offset和匀速动画详解
2018/02/06 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python语言生成水仙花数代码示例
2017/12/18 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
行政专员岗位职责
2014/01/02 职场文书
企业务虚会发言材料
2014/10/20 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
大学学生会辞职信
2015/05/13 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python
python中pymysql包操作数据库方法
2022/04/19 Python