¿Cómo eliminar el contenido de una carpeta?

Resuelto UnkwnTech asked hace 16 años • 28 respuestas

¿Cómo puedo eliminar el contenido de una carpeta local en Python?

El proyecto actual es para Windows, pero también me gustaría ver *nix.

UnkwnTech avatar Oct 09 '08 11:10 UnkwnTech
Aceptado
import os, shutil
folder = '/path/to/folder'
for filename in os.listdir(folder):
    file_path = os.path.join(folder, filename)
    try:
        if os.path.isfile(file_path) or os.path.islink(file_path):
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            shutil.rmtree(file_path)
    except Exception as e:
        print('Failed to delete %s. Reason: %s' % (file_path, e))
Nick Stinemates avatar Oct 09 '2008 04:10 Nick Stinemates

Simplemente puedes hacer esto:

import os
import glob

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

Por supuesto, puede utilizar otro filtro en su ruta, por ejemplo: /YOU/PATH/*.txt para eliminar todos los archivos de texto en un directorio.

Blueicefield avatar Apr 22 '2011 15:04 Blueicefield

Puede eliminar la carpeta en sí, así como todo su contenido, usando shutil.rmtree:

import shutil
shutil.rmtree('/path/to/folder')
shutil.rmtree(path, ignore_errors=False, onerror=None)


Eliminar un árbol de directorios completo; La ruta debe apuntar a un directorio (pero no a un enlace simbólico a un directorio). Si ignore_errors es verdadero, se ignorarán los errores resultantes de eliminaciones fallidas; si es falso o se omite, dichos errores se manejan llamando a un controlador especificado por onerror o, si se omite, generan una excepción.

Oli avatar Oct 09 '2008 07:10 Oli

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 también en Windows.

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))
Iker Jimenez avatar Jul 02 '2009 09:07 Iker Jimenez

Me sorprende que nadie haya mencionado lo fantástico pathlibque es hacer este trabajo.

Si solo desea eliminar archivos en un directorio, puede ser una línea

from pathlib import Path

[f.unlink() for f in Path("/path/to/folder").glob("*") if f.is_file()] 

Para eliminar directorios también de forma recursiva, puedes escribir algo como esto:

from pathlib import Path
from shutil import rmtree

for path in Path("/path/to/folder").glob("**/*"):
    if path.is_file():
        path.unlink()
    elif path.is_dir():
        rmtree(path)
Husky avatar May 15 '2019 14:05 Husky