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中list循环语句用法实例
Nov 10 Python
Django中使用group_by的方法
May 26 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
python基本语法练习实例
Sep 19 Python
python素数筛选法浅析
Mar 19 Python
python3 读取Excel表格中的数据
Oct 16 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
python爬虫selenium模块详解
Mar 30 Python
python基础之错误和异常处理
Oct 24 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
angularJs的ng-class切换class
2017/06/23 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
python画图的函数用法以及技巧
2019/06/28 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
浅析Python 条件控制语句
2020/07/15 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
什么是接口(Interface)?
2013/02/01 面试题
企业年会主持词
2014/03/27 职场文书
酒店端午节活动方案
2014/08/26 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
党员身份证明材料
2015/06/19 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
SQL Server实现分页方法介绍
2022/03/16 SQL Server
Oracle用户管理及赋权
2022/04/24 Oracle