53๐
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 asTemporaryFile()
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 asTemporaryFile()
does, except that data is spooled in memory until the file size exceedsmax_size
, or until the fileโsfileno()
method is called, at which point the contents are written to disk and operation proceeds as withTemporaryFile()
.",
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
6๐
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.
- [Django]-Django Query Related Field Count
- [Django]-TransactionManagementError "You can't execute queries until the end of the 'atomic' block" while using signals, but only during Unit Testing
- [Django]-Determine complete Django url configuration
2๐
You should use something from the tempfile
module. I think that it has everything you need.
- [Django]-Django: How can I identify the calling view from a template?
- [Django]-Django REST Exceptions
- [Django]-Django manage.py: Migration applied before its dependency
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))
- [Django]-Can I use HTTP Basic Authentication with Django?
- [Django]-Annotate a queryset with the average date difference? (django)
- [Django]-Django template system, calling a function inside a model