Eliminando un archivo temporal en Python

Este es mi código existente para comprimir una carpeta que he reunido principalmente de la ayuda aquí:

#!/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:]) 

Si quisiera eliminar el archivo zip que acabo de crear al final de la operación, ¿sería este el mejor comando?

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

El os.remove(os.path.join(temp_dir, now + ".zip")) estará bien.

Sin embargo, debe asegurarse de que se ejecute correctamente en cada caso que lo desee.

Si se va a eliminar en cualquier caso, podrías hacer

 create it try: work with it finally: remove it 

Pero en este caso, también podría usar el módulo tempfile :

 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. 

Sin embargo, si desea que desaparezca solo en circunstancias especiales (en caso de éxito, error, …) está atascado con os.remove(os.path.join(temp_dir, now+".zip")) y usted debe usarlo cada vez que se elimine el archivo.

 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? 

Esta sería la forma de hacerlo:

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

diviértete Mike

Considere el uso de la biblioteca de archivos temporales incorporada de Python. Maneja la limpieza del archivo temporal cuando está cerrado.