¿Cómo borrar un archivo por extensión en Python?

Estaba tratando de hacer un script que borra elementos con la extensión “.zip”.

import sys import os from os import listdir test=os.listdir("/Users/ben/downloads/") for item in test: if item.endswith(".zip"): os.remove(item) 

Cada vez que ejecuto el script obtengo:

 OSError: [Errno 2] No such file or directory: 'cities1000.zip' 

cities1000.zip es obviamente un archivo en mi carpeta de descargas.

¿Qué hice mal aquí? ¿Es el problema que os.remove requiere la ruta completa al archivo? Si este es el problema, ¿cómo puedo hacerlo en este script actual sin tener que volver a escribirlo?

Puede establecer la ruta en una variable dir_name , luego use os.path.join para su os.remove .

 import os dir_name = "/Users/ben/downloads/" test = os.listdir(dir_name) for item in test: if item.endswith(".zip"): os.remove(os.path.join(dir_name, item)) 

Para esta operación, debe adjuntar el nombre del archivo a la ruta del archivo para que el comando sepa qué carpeta está buscando.

Puede hacer esto correctamente y de manera portátil en python usando el comando os.path.join .
Por ejemplo:

 import sys import os directory = "/Users/ben/downloads/" test = os.listdir( directory ) for item in test: if item.endswith(".zip"): os.remove( os.path.join( directory, item ) ) 

Enfoque alternativo que evita unirse a ti mismo una y otra vez: usa el módulo glob para unirte una vez, luego deja que te devuelva los caminos directamente.

 import glob import os dir = "/Users/ben/downloads/" for zippath in glob.iglob(os.path.join(dir, '*.zip')): os.remove(zippath) 

Prepende el directorio al nombre de archivo

 os.remove("/Users/ben/downloads/" + item) 

EDITAR: o cambiar el directorio de trabajo actual usando os.chdir .

 origfolder = "/Users/ben/downloads/" test = os.listdir(origfolder) for item in test: if item.endswith(".zip"): os.remove(os.path.join(origfolder, item)) 

El nombre de directorio no está incluido en la salida de os.listdir. Debe adjuntarlo para hacer referencia al archivo de la lista devuelta por dicha función.