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 装饰器功能以及函数参数使用介绍
Jan 27 Python
python数据结构树和二叉树简介
Apr 29 Python
python使用post提交数据到远程url的方法
Apr 29 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
解决Python传递中文参数的问题
Aug 04 Python
Python编码类型转换方法详解
Jul 01 Python
详解python中的hashlib模块的使用
Apr 22 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
python基于机器学习预测股票交易信号
May 25 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php自动加载方式集合
2016/04/04 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
JavaScript中的null和undefined区别介绍
2015/01/01 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
详解python中的装饰器
2018/07/10 Python
django+echart数据动态显示的例子
2019/08/12 Python
python excel转换csv代码实例
2019/08/26 Python
python的setattr函数实例用法
2020/12/16 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
产假请假条
2014/04/10 职场文书
主题教育活动总结
2014/05/05 职场文书
冬季施工防火方案
2014/05/17 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
MySQL快速插入一亿测试数据
2021/06/23 MySQL
Go 语言中 20 个占位符的整理
2021/10/16 Golang