Tengo un problema al eliminar directorios vacíos. Aquí está mi código:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
El argumento dir_to_searches donde paso el directorio donde se debe hacer el trabajo. Ese directorio se ve así:
test/20/...
test/22/...
test/25/...
test/26/...
Tenga en cuenta que todas las carpetas anteriores están vacías. Cuando ejecuto este script las carpetas 20, 25solo se elimina! Pero las carpetas 25y 26no se eliminan, a pesar de que son carpetas vacías.
Editar:
La excepción que estoy recibiendo son:
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/26'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/25'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27/tmp'
¿Dónde estoy cometiendo un error?

rmdir /path/to/25th/foldereliminar todo el directorio. ¡Lo que significa que ese directorio está vacío!Respuestas:
Prueba
shutil.rmtree:fuente
rmtreeEliminó todo el directorio? Supongo que es similar al unorm -Rf $DIRimport os for root, dirs, files in os.walk(top, topdown=False): for name in dirs: os.rmdir(os.path.join(root, name))El comportamiento predeterminado de
os.walk()es caminar de raíz a hoja. Establecertopdown=Falseenos.walk()caminar desde la hoja hasta la raíz.fuente
Aquí está mi
pathlibdesvinculador de directorio recursivo puro :fuente
Trate
rmtree()deshutilde la biblioteca estándar de Pythonfuente
rmtreeEliminó todo el directorio? Supongo que es similar al unorm -Rf $DIRes mejor usar la ruta absoluta e importar solo la función rmtree
from shutil import rmtreeya que este es un paquete grande, la línea anterior solo importará la función requerida.fuente
rmtree(); noshutil.rmtree()Solo para el próximo tipo que busca una solución de micropython, esto funciona puramente basado en os (listdir, remove, rmdir). No es completo (especialmente en el manejo de errores) ni elegante, sin embargo, funcionará en la mayoría de las circunstancias.
fuente
El comando (dado por Tomek) no puede eliminar un archivo, si es de solo lectura . por lo tanto, uno puede usar -
fuente
NameError: name 'stat' is not defined. ¿Cómo se ha definido?Aquí hay otra solución de pathlib puro , pero sin recurrencia:
fuente
Aquí hay una solución recursiva:
fuente
Para usuarios de Linux, simplemente puede ejecutar el comando de shell de una manera pitónica
donde
rmse alza para quitar y-rpara de forma recursivafuente