使用 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会在标准目录列表中搜索,以找到调用用户可以在其中创建文件的目录。
按优先顺序排列的列表是:
- 由TMPDIR环境变量命名的目录。
- 由TEMP环境变量命名的目录。
- 由TMP环境变量命名的目录。
- 特定于平台的目录:
- 在 Windows 上,目录C:\TEMP 、 C:\TMP 、 \TEMP和\TMP依次排列。
- 在所有其他平台上,目录/tmp 、 /var/tmp和/usr/tmp依次排列。
- 当前工作目录。
例子:
Python3
import tempfile
tempfile.tempdir = "/temp"
print(tempfile.gettempdir())
输出:
/temp