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文件写入实例分析
Apr 08 Python
深入理解python中的atexit模块
Mar 07 Python
python 调用win32pai 操作cmd的方法
May 28 Python
Django开发中复选框用法示例
Mar 20 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
对python for 文件指定行读写操作详解
Dec 29 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
pyqt5中动画的使用详解
Apr 01 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
Python利用capstone实现反汇编
Apr 06 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投票程序源码
2007/03/11 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
js获取Get值的方法
2016/09/29 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
python和shell变量互相传递的几种方法
2013/11/20 Python
python中的装饰器详解
2015/04/13 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python编程中的异常处理教程
2015/08/21 Python
使用Python生成XML的方法实例
2017/03/21 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
降价通知函
2015/04/23 职场文书
放飞理想主题班会
2015/08/14 职场文书
windows安装python超详细图文教程
2021/05/21 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript