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 OpenCV获取视频的方法
Feb 28 Python
python os用法总结
Jun 08 Python
Django Rest framework之权限的实现示例
Dec 17 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
python打造爬虫代理池过程解析
Aug 15 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
pytorch 获取tensor维度信息示例
Jan 03 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
基于Python的EasyGUI学习实践
May 07 Python
Django模型层实现多表关系创建和多表操作
Jul 21 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
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python实现大文本文件分割
2019/07/22 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
如何使用Pytorch搭建模型
2020/10/26 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
极简的HTML5模版
2015/07/09 HTML / CSS
手机配件第一品牌:ZAGG
2017/05/28 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
UML设计模式笔试题
2014/06/07 面试题
幼儿园毕业教师感言
2014/02/21 职场文书
团购业务员岗位职责
2014/03/15 职场文书
大学新闻系自荐书
2014/05/31 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
黑白记忆观后感
2015/06/18 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript