📜  使用 Python-tempfile 创建临时文件和目录

📅  最后修改于: 2022-05-13 01:55:34.402000             🧑  作者: Mango

使用 Python-tempfile 创建临时文件和目录

Tempfile是一个Python模块,用于处理临时文件。当我们需要在程序执行期间临时存储数据或处理大量数据时,可能需要临时文件。这些文件使用唯一的名称创建并存储在取决于平台的默认位置。使用tempfile创建的文件一关闭就会被删除。

让我们看看如何创建和编辑这些文件:

创建临时文件

该文件是使用TemporaryFile()函数创建的。默认情况下,文件以w+b模式打开,即我们可以对打开的文件进行读写。使用二进制模式,以便文件可以处理所有类型的数据。此文件在文件系统中可能没有正确的可见名称。

例子:

Python3
import tempfile
  
temp = tempfile.TemporaryFile()
print(temp)
print(temp.name)


Python3
import tempfile
  
temp = tempfile.NamedTemporaryFile()


Python3
import tempfile
  
temp = tempfile.NamedTemporaryFile()
print(temp)
print(temp.name)


Python3
import tempfile
  
temp = tempfile.NamedTemporaryFile(prefix='pre_', suffix='_suf')
print(temp.name)


Python3
import tempfile
  
temp = tempfile.TemporaryFile()
temp.write(b'foo bar')
temp.seek(0)
print(temp.read())
  
temp.close()


Python3
import tempfile
import os
   
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir)


Python3
import tempfile
  
   
secure_temp = tempfile.mkstemp(prefix="pre_",suffix="_suf")
print(secure_temp)


Python3
import tempfile
   
secure_temp_dir = tempfile.mkdtemp(prefix="pre_",suffix="_suf")
print(secure_temp_dir)


Python3
import tempfile
  
tempfile.tempdir = "/temp"
print(tempfile.gettempdir())


输出:

<_io.BufferedRandom name=7>
7

该函数返回一个类似文件的对象,可以用作临时存储区域。 name属性用于获取文件的随机且唯一的名称。请注意,这不是实际可见的文件名,并且文件系统中没有对此文件的引用。

创建命名临时文件

NamedTemporaryFile()函数以与TemporaryFile()相同的方式创建文件,但在文件系统中具有可见的名称。它需要一个删除参数,我们可以将其设置为False以防止文件在关闭时被删除。

例子:

Python3

import tempfile
  
temp = tempfile.NamedTemporaryFile()

Python3

import tempfile
  
temp = tempfile.NamedTemporaryFile()
print(temp)
print(temp.name)

输出:


/tmp/tmprumbbjz4

这也像以前一样返回一个类似对象的文件,唯一的区别是这次文件实际上有一个可见的名称。

为临时文件添加后缀和前缀

我们可以通过指定参数' suffix '和' prefix '来选择给命名临时文件的名称添加后缀前缀

Python3

import tempfile
  
temp = tempfile.NamedTemporaryFile(prefix='pre_', suffix='_suf')
print(temp.name)

输出:

/tmp/pre_ddur6hvr_suf

读取和写入临时文件

write()方法用于写入临时文件。默认情况下,它将输入作为二进制数据。我们可以将要写入的字符串作为输入传递,并在前面加上“ b ”以将其转换为二进制数据。 write函数返回写入的字符数。如果我们以文本模式(w+t)打开文件,我们可以改用writelines()方法,它接受一个字符串参数。写入文件后,指针位于文件末尾。因此,在我们可以读取内容之前,调用seek()方法将文件指针设置在文件的开头。 seek()将我们要放置指针的字符的索引作为参数。然后使用read()函数读取内容。

例子:

Python3

import tempfile
  
temp = tempfile.TemporaryFile()
temp.write(b'foo bar')
temp.seek(0)
print(temp.read())
  
temp.close()

输出 :

b'foo bar'

创建临时目录

和创建文件一样,我们也可以创建一个临时目录来存放我们的临时文件。 TemporaryDirectory()函数用于创建目录。处理完临时文件后,需要使用os.removedirs()手动删除目录

Python3

import tempfile
import os
   
temp_dir = tempfile.TemporaryDirectory()
print(temp_dir)

输出:

安全临时文件和目录

我们可以使用mkstemp()以安全的方式创建一个临时文件。该方法创建的文件只有创建用户可读可写。我们可以像在NamedTemporaryFile()中一样添加前缀后缀参数。默认模式是二进制,但我们可以通过将 ' text ' 参数设置为True以文本模式打开它。此文件在关闭时不会被删除。
例子:

Python3

import tempfile
  
   
secure_temp = tempfile.mkstemp(prefix="pre_",suffix="_suf")
print(secure_temp)

输出:

(71, '/tmp/pre_i5us4u9j_suf')

同样,我们可以使用mkdtemp()方法创建一个安全的临时目录。

例子:

Python3

import tempfile
   
secure_temp_dir = tempfile.mkdtemp(prefix="pre_",suffix="_suf")
print(secure_temp_dir)

输出:

/tmp/pre_9xmtwh4u_suf

临时文件的位置

我们可以通过设置tempdir属性来设置文件存储的位置。可以使用gettempdir()方法获取位置。当我们创建一个临时文件或目录时, Python会在标准目录列表中搜索,以找到调用用户可以在其中创建文件的目录。

按优先顺序排列的列表是:

  1. TMPDIR环境变量命名的目录。
  2. TEMP环境变量命名的目录。
  3. TMP环境变量命名的目录。
  4. 特定于平台的目录:
    • 在 Windows 上,目录C:\TEMPC:\TMP\TEMP\TMP依次排列。
    • 在所有其他平台上,目录/tmp/var/tmp/usr/tmp依次排列。
  5. 当前工作目录。

例子:

Python3

import tempfile
  
tempfile.tempdir = "/temp"
print(tempfile.gettempdir())

输出:

/temp