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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
python使用opencv读取图片的实例
Aug 17 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python实现KNN分类算法
Oct 16 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
Python通过队列来实现进程间通信的示例
Oct 14 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写的简易聊天室代码
2011/06/04 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
优化javascript的执行速度
2010/01/23 Javascript
js中判断控件是否存在
2010/08/25 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
jQuery事件对象总结
2016/10/17 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
用js实现放大镜效果
2020/10/28 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
tensorflow更改变量的值实例
2018/07/30 Python
python抖音表白程序源代码
2019/04/07 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
员工入职担保书范文
2014/04/01 职场文书
售后服务承诺函格式
2015/01/21 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
2015年采购工作总结
2015/04/10 职场文书
家长会开场白和结束语
2015/05/29 职场文书
暑期工社会实践报告
2015/07/13 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
css样式important规则的正确使用方式
2022/06/10 HTML / CSS