Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing a temporary file in Python

Tags:

python

join

zip

This is my existing code to zip a folder which I have put together mostly from help on here:

#!/usr/bin/env python

import os
import sys
import datetime

now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M")
target_dir = '/var/lib/data'
temp_dir='/tmp'

zip = zipfile.ZipFile(os.path.join(temp_dir, now+".zip"), 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
   for file in files:
      fn = os.path.join(base, file)
      zip.write(fn, fn[rootlen:])

If I wanted to remove the zip file I just created at the end of the opperation, would the best command be this?

os.remove.join(temp_dir, now+".zip")
like image 477
Jimmy Avatar asked Nov 19 '12 23:11

Jimmy


People also ask

How do I delete temp files in Python?

gettempdir() to get the directory where all the temp files are stored. After running the program, if you go to temp_dir (which is /tmp in my case – Linux), you can see that the newly created file 3 is not there. This proves that Python automatically deletes these temporary files after they are closed.


2 Answers

The os.remove(os.path.join(temp_dir, now + ".zip")) will be fine.

However, you should ensure that it is executed properly in every case you want it to.

If it is to be removed in any case, you could do

create it
try:
    work with it
finally:
    remove it

But in this case, you could as well use the tempfile module:

import tempfile
with tempfile.NamedTemporaryFile(suffix='.zip') as t:
    z = zipfile.ZipFile(t.name, 'w') # re-create it
    do stuff with z
# after the with clause, the file is gone.

If, however, you want it to be gone only under special circumstances (on success, on error, ...) you are stuck with os.remove(os.path.join(temp_dir, now+".zip")) and you should use it whenever the file is to be deleted.

try:
    do_stuff
except VerySpecialException:
    os.remove(os.path.join(temp_dir, now+".zip")) # do that here for a special exception?
    raise # re-raise
except: # only use a bare except if you intend to re-raise
    os.remove(os.path.join(temp_dir, now+".zip")) # or here for all exceptions?
    raise # re-raise
else:
    os.remove(os.path.join(temp_dir, now+".zip")) # or here for success?
like image 73
glglgl Avatar answered Sep 20 '22 00:09

glglgl


This would be the way to do it:

os.remove(os.path.join(temp_dir, now+".zip"))

have fun, Mike

like image 26
MikeHunter Avatar answered Sep 21 '22 00:09

MikeHunter