如何在django中生成临时文件然后销毁

时间:2012-11-29 05:44:46

标签: python django

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

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

是否存在用户会话后文件自动删除的临时位置

4 个答案:

答案 0 :(得分:43)

Python正是为了这个目的而拥有tempfile module。您无需担心文件的位置/删除,它适用于所有支持的平台。

有三种类型的临时文件:

  • tempfile.TemporaryFile - 只是基本的临时文件,
  • tempfile.NamedTemporaryFile - “此函数与TemporaryFile()完全相同,但保证文件在文件系统中具有可见名称(在Unix上,目录条目未取消链接)可以从文件对象的name属性中检索该名称。“,
  • tempfile.SpooledTemporaryFile - “此函数与TemporaryFile()的操作完全相同,只是数据在内存中假脱机,直到文件大小超过max_size,或直到文件的{{1}调用方法,此时将内容写入磁盘,操作与fileno()一样进行。“,

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

TemporaryFile()

答案 1 :(得分:1)

我要补充一点,Django在django.core.files.temp中具有内置的NamedTemporaryFile功能,建议Windows用户优先使用tempfile模块。这是因为Django版本利用Windows中的O_TEMPORARY标志来防止重新打开文件而没有提供与代码库here中所述相同的标志。

使用它看起来像:

from django.core.files.temp import NamedTemporaryFile

temp_file = NamedTemporaryFile(delete=True)

Here是一个不错的小教程,它涉及如何处理内存文件,并归功于Mayank Jain

答案 2 :(得分:0)

您应该使用tempfile模块中的内容。我认为它拥有你需要的一切。

答案 3 :(得分:0)

我刚刚添加了一些重要的更改:将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))