Removing a temporary file in Python
join, python, zip
Solution
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?
Problem
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") ```