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实现apahce网站日志分析示例
Apr 02 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
python查看列的唯一值方法
Jul 17 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python操作gitlab API过程解析
Dec 27 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
Python异常处理机制结构实例解析
Jul 23 Python
python 绘制国旗的示例
Sep 27 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下载远程文件类(支持断点续传)
2008/11/14 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python+flask实现API的方法
2018/11/21 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
留学推荐信怎么写
2014/01/25 职场文书
五好党支部事迹材料
2014/02/06 职场文书
股东合作协议书范本
2014/04/14 职场文书
激励口号大全
2014/06/17 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
庆国庆活动总结
2014/08/28 职场文书
2014年协会工作总结
2014/11/22 职场文书
校长新学期致辞
2015/07/30 职场文书
教务处干事工作总结
2015/08/14 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
详解Redis主从复制实践
2021/05/19 Redis