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

目录
相关文章
|
2天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
12 5
|
2天前
|
人工智能 数据挖掘 开发者
探索Python编程:从基础到进阶
【10月更文挑战第32天】本文旨在通过浅显易懂的语言,带领读者从零开始学习Python编程。我们将一起探索Python的基础语法,了解如何编写简单的程序,并逐步深入到更复杂的编程概念。文章将通过实际的代码示例,帮助读者加深理解,并在结尾处提供练习题以巩固所学知识。无论你是编程新手还是希望提升编程技能的开发者,这篇文章都将为你的学习之旅提供宝贵的指导和启发。
|
1天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
探索Python编程:从基础到高级
【10月更文挑战第33天】本文是一篇深入浅出的Python编程入门教程,适合初学者阅读。文章首先介绍了Python的基本概念和语法,然后通过实例讲解了如何使用Python进行数据处理和分析,最后介绍了一些高级特性和库,帮助读者更好地掌握Python编程。无论你是编程新手还是有一定经验的开发者,这篇文章都能给你带来新的启示和收获。
|
2天前
|
存储 人工智能 数据挖掘
探索Python编程的奥秘
【10月更文挑战第32天】在这篇文章中,我们将一起踏上一段奇妙的Python编程之旅。从基础语法到高级特性,我们将通过一系列简单而直观的代码示例,逐步揭开Python语言背后的神秘面纱。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起开始这段旅程吧!
|
Windows Python Shell
|
Python
Python 目录操作(转)
在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回当前目录('.
831 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") #删除所给路径最后一个目录下所有空目录。
933 0
|
9天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###