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

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

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


【导读】:本文先介绍了什么是临时文件,然后围绕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 tempfile
fp = 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的用法。

目录
相关文章
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1264 102
|
7月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1289 68
|
7月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
462 3
|
7月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
683 3
|
7月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
484 3
|
7月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
692 0
|
Python
python读写execle文件数据
python读写execle文件数据
184 0
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
307 1
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
659 14

推荐镜像

更多