136 votos

Eliminar el contenido de la carpeta en Python

¿Cómo puedo borrar el contenido de una carpeta local en Python.
El proyecto actual es para Windows, pero me gustaría ver también a *nix.

117voto

Oli Puntos 5620

Pruebe el módulo Shutil

import shutil
shutil.rmtree('/path/to/folder')

Descripción: shutil.rmtree(path, ignore_errors=False, onerror=None)

Docstring: Borrar recursivamente un árbol de directorios.

Si ignore_errors se establece, los errores son ignorado; de lo contrario, si onerror está listo, se llama a manejar el error con argumentos (func, path, exc_info) donde func es os.listdir , os.remove o os.rmdir El camino es el argumento para que función que causó que fallara; y exc_info es una tupla devuelta por sys.exc_info() . Si ignore_errors es falso y onerror es None un se plantea una excepción.

113voto

Nick Stinemates Puntos 5642

Actualizado para borrar sólo los archivos y para usar el método os.path.join() sugerido en los comentarios. Si quieres eliminar todos el contenido de la carpeta, sólo tiene que eliminar la declaración "si".

import os 
folder = '/path/to/folder'
for the_file in os.listdir(folder):
    file_path = os.path.join(folder, the_file)
    try:
        if os.path.isfile(file_path):
            os.unlink(file_path)
    except Exception, e:
        print e

69voto

Blueicefield Puntos 589

Simplemente puedes hacer esto:

import os
import glob

files = glob.glob('/YOUR/PATH/*')
for f in files:
    os.remove(f)

Por supuesto, puedes usar otro filtro en tu camino, por ejemplo: /YOU/PATH/*.txt para eliminar todos los archivos de texto de un directorio.

48voto

Iker Jimenez Puntos 3351

Ampliando la respuesta de Mhawke, esto es lo que he implementado. Elimina todo el contenido de una carpeta pero no la carpeta en sí. Probado en Linux con archivos, carpetas y enlaces simbólicos, debería funcionar en Windows también.

import os
import shutil

for root, dirs, files in os.walk('/path/to/folder'):
    for f in files:
        os.unlink(os.path.join(root, f))
    for d in dirs:
        shutil.rmtree(os.path.join(root, d))

35voto

jgoeders Puntos 381

La respuesta aceptada no funcionará si desea eliminar todo el contenido de la carpeta (incluidas las subcarpetas), ya que la carpeta podría no estar vacía, lo que provocaría un error en os.unlink.

Usar rmtree y recrear la carpeta podría funcionar, pero he encontrado errores al borrar y recrear inmediatamente las carpetas en las unidades de red.

La solución propuesta utilizando walk no funciona, ya que utiliza rmtree para eliminar carpetas y luego puede intentar utilizar os.unlink en los archivos que estaban anteriormente en esas carpetas. Esto provoca un error.

La solución global publicada también intentará eliminar las carpetas que no estén vacías, lo que provocará errores.

Le sugiero que lo use:

folder_path = '/path/to/folder'
for file_object in os.listdir(folder_path):
    file_object_path = os.path.join(folder_path, file_object)
    if os.path.isfile(file_object_path):
        os.unlink(file_object_path)
    else:
        shutil.rmtree(file_object_path)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X