Python编程基础 - 使用临时文件和临时目录


李俊才
CSDN博客:jcLee1995
291148484@163.com


【导读】:本文先介绍了什么是临时文件,然后围绕Python内建模块Temporary讲解了如何管理和使用临时文件。

软件开发过程中有时会遇到遇到的某些文件只在一个相对较短的时间范围内有用的情况,这些文件即所谓临时文件。对于这些文件我么甚至不关心他们叫什么,毕竟他们仅仅在其生命周期内产生特定的作用。当他们不再有用时,如果还残留在计算机中,就成为了所谓的垃圾文件。

对于程序设计者而言,我们当然不想每一次都为这些琐碎的文件都起一个名字,指定一个存储路径,然后去找寻使用该文件,并最后还要通过代码或者手动的方式去删除他们。因此,一个专门管理和使用临时目录及文件的编程模块就显得必要。庆幸的是,在Python中已经为我们提供了这样一个模块——他就是tempfile。无需额外安装,你可以直接将其导入在你的代码中以进行使用它所提供的相应接口:

import tempfile

该模块提供了图示的一些接口:

如果你只想导入其中的某个对象,那么也可以参照下面的写法完成导入:

from tempfile import TemporaryFile, TemporaryDirectory

接下来,我们将详细了解该模块中的各个接口函数。

1. TemporaryFile()函数 - 用于创建临时文件。

  • 文件将像mkstemp()函数所做的那样被创建。先看接口信息:

    def TemporaryFile(mode='w+b', buffering=-1, encoding=None,newline=None, suffix=None, prefix=None,dir=None, *, errors=None):"""创建并返回一个临时文件Arguments:'prefix', 'suffix', 'dir' -- as for mkstemp.'mode' -- io.open的模式参数 (默认为"w+b").'buffering' -- io.open的缓冲区大小参数 (默认为 -1).'encoding' -- io.open的编码参数 (默认为 None)'newline' -- io.open的换行符参数 (默认为 None)'errors' -- io.open的errors参数 (默认为 None)返回具有类似文件的接口的对象。该文件没有名称,关闭后将不再存在。"""
    

【示例1】使用TemporaryFile()创建临时文件(1)

import tempfilefp = tempfile.TemporaryFile() # 创建一个临时文件
fp.write(b'Hello world!')     # 向该零时文件中写入一些数据fp.seek(0) # 从文件中读取数据
fp.read()

Out[]:b’Hello world!’
这时产生一个临时文件,你往往可能看不到它,但是它确实存在。且能够使用,正像上述代码中展示的那样。

fp.close()

关闭文件,这时该临时文件就自动删除了

【示例2】使用TemporaryFile()创建临时文件(2)—— 使用上下文管理器创建临时文件

# 使用上下文管理器创建临时文件
with tempfile.TemporaryFile() as fp:fp.write(b'Hello world!')fp.seek(0)data = fp.read()
data

Out[]:b’Hello world!’
运行至此文件将被自动地关闭并删除,这时使用上下文管理器的便利之处。

2.TemporaryDirectory()类 - 用于创建临时目录

创建并返回一个临时目录。这与mkdtemp()函数具有相同的行为(实际上TemporaryDirectory类初始化时将调用mkdtemp()函数),但可以用作上下文管理器。

【示例3】使用TemporaryFile()创建临时目录

with tempfile.TemporaryDirectory() as tmpdirname:print('创建临时目录:', tmpdirname)

Out[]:创建临时目录: C:\Users\JackLee\AppData\Local\Temp\tmpj4h3mfqn
同理,在上下文管理器中运行至此,该临时目录也已经被自动删除。

3. NamedTemporaryFile()函数 - 创建具有可见名称的临时文件

此函数执行的操作与 TemporaryFile() 完全相同,但确保了该临时文件在文件系统中具有可见的名称(在 Unix 上表现为目录条目不取消链接)。

  • 从返回的文件类对象的 name 属性中可以检索到文件名。
  • 在临时文件仍打开时,是否允许用文件名第二次打开文件,在各个平台上是不同的(在 Unix 上可以,但在 Windows NT 或更高版本上不行)。
  • 如果 delete 为 true(默认值),则文件会在关闭后立即被删除。
  • 该函数返回的对象始终是文件类对象 (file-like object),它的 file 属性是底层的真实文件对象。
  • 文件类对象可以像普通文件一样在 with 语句中使用。
    接口信息如下:

    def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,newline=None, suffix=None, prefix=None,dir=None, delete=True, *, errors=None):"""创建并返回一个临时文件参数表:'prefix', 'suffix', 'dir':   传给mkstemp()函数所用的参数.'mode':                      io.open的模式参数(默认为"w+b").'buffering':                 io.open的缓冲区大小参数 (默认为-1).'encoding':                  io.open的编码参数 (默认为None)'newline':                   io.open的换行符参数(默认为None)'delete':                    文件是否在关闭时被删除 (默认为True).'errors':                    io.open的errors参数 (默认为None)创建的文件正如mkstemp()函数所做的那样.返回具有类似文件的接口的对象;文件的名称可作为其"name"属性访问。文件关闭时将自动删除,除非"delete"参数设置为“False”。"""
    

4. SpooledTemporaryFile()函数 - 创建内存临时文件

此函数执行的操作与 TemporaryFile() 完全相同,但会将数据缓存在内存中直到文件大小超过 max_size,或调用文件的 fileno() 方法为止,此时数据会被写入磁盘,并且写入操作与 TemporaryFile() 相同。
此函数生成的文件对象有一个额外的方法——rollover(),可以忽略文件大小,让文件立即写入磁盘。

5. mkstemp()函数 - 创建临时文件,但需要调用者自己删除之

  • 其接口信息如下:

    def mkstemp(suffix=None, prefix=None, dir=None, text=False):"""用户可调用函数创建并返回一个唯一的临时文件。返回值是一对(fd,name),其中fd是os.open返回的文件描述符,name是文件名。如果'suffix'不是None, 文件名将以suffix结尾,否则没有suffix(后缀)。如果'prefix'不是None, 文件名将以prefix开始,否则将使用一个默认的prefix(前缀)如果'dir'不是None, 文件将在该目录(directory)中创建,否则将使用默认目录。如果指定了'text'并且为True,则以文本模式打开文件。  否则(也是默认) 文件将以二进制形式打开.如果'suffix', 'prefix' 和 'dir' 其中之一不是 None, 那么他们必须时一样的类型。如果他们的类型为 bytes, 那么返回的name将是 bytes; str。文件只能由创建用户标识来读写。如果操作系统使用权限位来指示文件是否可执行,则该文件不可由任何人执行。文件描述符不由该进程的子进程继承。 调用者自己需要负责删除文件。"""
    

6. mkdtemp()函数 - 创建临时目录,但需要调用者自己删除之

可以参考TemporaryDirectory的用法。

Python编程基础 - 使用临时文件和临时目录相关推荐

  1. python tempfile自动删除_Python tempfile模块生成临时文件和临时目录

    tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. tempfile 模块中常用的函数,如表 1 所示. 表 1 t ...

  2. python tempfile cleanup_Python tempfile模块:生成临时文件和临时目录

    Python tempfile模块:生成临时文件和临时目录 tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. te ...

  3. 第1章 Python编程基础

    第1章 Python编程基础 文章目录 第1章 Python编程基础 前言 一.编译型语言和解释型语言的区别 编译型语言 解释型语言 关于 Python 总结 二.Python是什么 三.Python ...

  4. Python入门——第一章 python编程基础

    Python入门 文章目录 Python入门 第一章 python编程基础 1.1 基本输入输出 1.1.1使用print()函数进行简单输出 chr()函数 print()输出到指定文件 print ...

  5. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析

    自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 自学Python 编程基础.科学计算及数据分析 epub pdf mobi txt 下载 ☆☆☆☆☆ 李金 著 ...

  6. python编程基础与应用-Python程序设计基础与应用

    图书简介 配套资源:部分全彩印刷.电子课件.教学大纲.习题答案.源代码 本书特色: ★知名Python教育者董付国老师新作. ★言简意赅,案例丰富,配套资源超全部分内容全彩呈现. ★本书全部代码适用于 ...

  7. python编程基础知识点_12个关于Python编程基础知识的总结

    学习任何语言的时候,打好基础非常重要.就像学英文,要知道26个字母,还要学会单词.句型.语法等等.那么Python编程也一样,对于刚入门学习的人更应该打好基础.下面课课家收集了常用的12种Python ...

  8. 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)

    适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 京东图书地址:https://item.jd.com/12571990.html 当当图书地址:h ...

  9. 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(3)

    适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-10  把十进制数转换为其他进制形式. 例4-11  验证6174猜想. 例4-12.例4- ...

最新文章

  1. Arcgis mobile介绍
  2. 如何提高网站的访问速度
  3. django一个html先后两个form,django 一个页面两个表单 怎么提交
  4. redis高并发抽奖
  5. AI理论知识整理(6)-最大似然法
  6. JVM插码之三:javaagent介绍及javassist介绍
  7. 如何提升github的clone速度(简单粗暴,亲测有效)
  8. java弹出虚拟键盘_JS实现电脑虚拟键盘的操作
  9. 如何解决Mac无法写入U盘的问题
  10. shell中的比较与测试
  11. JavaScript——输出100以内的质数
  12. 学术会议海报制作和参考
  13. eclipse导入import git项目
  14. 常用图标(ICON)清单
  15. 弘辽科技:拼多多dsr是什么意思?有什么用?
  16. EXCEL宏根据指定行数来切割excel文件内容成新文件
  17. 试用期工作总结(个人版)
  18. python plt.subplot_Python Matplotlib subplot函数详解:创建子图
  19. 【turtlebot】陀螺仪的安装以及标定(iRobot Create 底盘+ADXRS610陀螺仪)
  20. 梅特勒电子称维修梅特勒天平维修XS64故障及处理办法

热门文章

  1. 【字符串替换】程序员面试金典——1.5基本字符串压缩
  2. Rust基础概念之函数
  3. 梯度,散度,旋度的理解
  4. VSCode Python解决 No module named 问题
  5. Python: str.strip()
  6. Data truncation: Data too long for column 'XXXXX' at row 1
  7. 用 Chrome 扩展实现修改
  8. Android通过泛型简化findViewById类型转换
  9. Nginx配置优化解读
  10. script标签中type为script type=text/x-template是个啥