38

I am doing some file processing and for generating the file i need to generate some temporary file from existing data and then use that file as input to my function.

But i am confused where should i save that file and then delete it.

Is there any temp location where files automatically gets deleted after user session

Mirage
  • 30,868
  • 62
  • 166
  • 261

4 Answers4

52

Python has the tempfile module for exactly this purpose. You do not need to worry about the location/deletion of the file, it works on all supported platforms.

There are three types of temporary files:

  • tempfile.TemporaryFile - just basic temporary file,
  • tempfile.NamedTemporaryFile - "This function operates exactly as TemporaryFile() does, except that the file is guaranteed to have a visible name in the file system (on Unix, the directory entry is not unlinked). That name can be retrieved from the name attribute of the file object.",
  • tempfile.SpooledTemporaryFile - "This function operates exactly as TemporaryFile() does, except that data is spooled in memory until the file size exceeds max_size, or until the file’s fileno() method is called, at which point the contents are written to disk and operation proceeds as with TemporaryFile().",

EDIT: The example usage you asked for could look like this:

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

    
abcdefg
gilbertbw
  • 634
  • 2
  • 9
  • 27
Tadeck
  • 132,510
  • 28
  • 152
  • 198
  • Can you show me some example of creating the temp file and then using it. i could not find it on the pagr – Mirage Nov 29 '12 at 06:06
  • @user32: The example is very simple: you instantiate one of the classes and get opened file in return, then you just operate on it as if it was standard file (with the limitations mentioned in the docs, meaning it is only temporary etc.). – Tadeck Nov 29 '12 at 06:40
  • Note that Django has a similar [NamedTemporaryFile](https://code.djangoproject.com/wiki/NamedTemporaryFile) made to be compatible on both unix and windows – evantkchong Mar 27 '20 at 10:08
5

I would add that Django has a built-in NamedTemporaryFile functionality in django.core.files.temp which is recommended for Windows users over using the tempfile module. This is because the Django version utilizes the O_TEMPORARY flag in Windows which prevents the file from being re-opened without the same flag being provided as explained in the code base here.

Using this would look something like:

from django.core.files.temp import NamedTemporaryFile

temp_file = NamedTemporaryFile(delete=True)

Here is a nice little tutorial about it and working with in-memory files, credit to Mayank Jain.

Samwise Ganges
  • 395
  • 6
  • 11
2

You should use something from the tempfile module. I think that it has everything you need.

mgilson
  • 300,191
  • 65
  • 633
  • 696
2

I just added some important changes: convert str to bytes and a command call to show how external programs can access the file when a path is given.

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))
alemol
  • 8,058
  • 2
  • 24
  • 29