Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing a file with only the python file object

Tags:

python

Let's say that I open a file, that didn't previously exist, for writing:

f = open('/tmp/test.txt', 'w')

Once this line is executed the file '/tmp/test.txt' is created. What is the cleanest way to remove (delete) the file with only the file object (f) and not the path?

like image 325
Russell Avatar asked Oct 21 '11 11:10

Russell


2 Answers

Full answer:

f = open('/tmp/test.txt', 'w')
f.close()

os.remove(f.name)

You should close file before deleting (documentation says that it throws exception under Windows if the file is opened - didn't check this). f in your case is just a handle. It is not a file itself, so you can't delete it directly.

like image 116
freakish Avatar answered Sep 20 '22 17:09

freakish


You cannot remove a file handle, only a file path, since multiple paths can refer to the same file and some files (like sockets) don't even have paths. Therefore:

import os
f = open('/tmp/test.txt', 'w')
os.unlink(f.name)
# You can still use f here, it's just only visible for people having a handle.
# close it when you're finished.

However, you should not do that - there's a better way to solve your problem. Use the tempfile module which deletes the file automatically, or just write to /dev/null if you just need a file handle and don't care about the content being written.

like image 35
phihag Avatar answered Sep 23 '22 17:09

phihag