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的用法。

目录
相关文章
|
19天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
7天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80
|
9天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
34 7
|
6天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
27 2
|
19天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
43 10
|
19天前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!
|
Windows Python Shell
|
Python
Python 目录操作(转)
在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前目录('.
835 0
|
Python
python的目录操作
[1.os]1.重命名:os.rename(old, new)2.删除:os.remove(file)3.列出目录下的文件 :os.listdir(path)4.获取当前工作目录:os.getcwd()5.改变工作目录:os.chdir(newdir)6.创建多级目录:os.makedirs(r"c:/python /test")7.创建单个目录:os.mkdir("test")8.删除多个目录:os.removedirs(r"c:/python") #删除所给路径最后一个目录下所有空目录。
938 0