35

我正在做一些文件处理和生成文件,我需要从现有数据生成一些临时文件,然后将该文件用作我的函数的输入。

但我很困惑我应该在哪里保存该文件然后删除它。

是否有任何临时位置在用户会话后自动删除文件

4

4 回答 4

51

Python 具有用于此目的的tempfile 模块。您无需担心文件的位置/删除,它适用于所有支持的平台。

临时文件分为三种:

  • tempfile.TemporaryFile- 只是基本的临时文件,
  • tempfile.NamedTemporaryFile- "这个函数的操作和原来的完全一样TemporaryFile(),除了保证文件在文件系统中有一个可见的名称(在 Unix 上,目录条目没有取消链接)。这个名称可以从文件对象的 name 属性中检索。 ",
  • tempfile.SpooledTemporaryFile- "此函数的操作方式与此完全相同TemporaryFile(),只是数据在内存中进行假脱机处理,直到文件大小超过max_size,或者直到fileno()调用文件的方法,此时内容被写入磁盘并且操作与TemporaryFile(). "一样继续。

编辑:您要求的示例用法可能如下所示:

>>> with TemporaryFile() as f:
        f.write('abcdefg')
        f.seek(0)  # go back to the beginning of the file
        print(f.read())

    
abcdefg
于 2012-11-29T05:49:33.730 回答
2

你应该使用tempfile模块中的一些东西。我认为它有你需要的一切。

于 2012-11-29T05:49:03.187 回答
2

我要补充一点,Django 在 django.core.files.temp 中有一个内置的 NamedTemporaryFile 功能,建议 Windows 用户使用 tempfile 模块。这是因为 Django 版本利用了 Windows 中的 O_TEMPORARY 标志,它可以防止在没有提供相同标志的情况下重新打开文件,如代码库中所述。

使用它看起来像:

from django.core.files.temp import NamedTemporaryFile

temp_file = NamedTemporaryFile(delete=True)

是一个关于它和使用内存文件的不错的小教程,感谢 Mayank Jain

于 2020-06-18T18:50:54.810 回答
1

我刚刚添加了一些重要的更改:将 str 转换为字节和一个命令调用,以显示在给定路径时外部程序如何访问文件。

import os
from tempfile import NamedTemporaryFile
from subprocess import call

with NamedTemporaryFile(mode='w+b') as temp:
    # Encode your text in order to write bytes
    temp.write('abcdefg'.encode())
    # put file buffer to offset=0
    temp.seek(0)

    # use the temp file
    cmd = "cat "+ str(temp.name)
    print(os.system(cmd))
于 2018-09-24T18:22:31.883 回答