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_search
es 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
, 25
solo se elimina! Pero las carpetas 25
y 26
no 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/folder
eliminar todo el directorio. ¡Lo que significa que ese directorio está vacío!Respuestas:
Prueba
shutil.rmtree
:fuente
rmtree
Eliminó todo el directorio? Supongo que es similar al unorm -Rf $DIR
import 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=False
enos.walk()
caminar desde la hoja hasta la raíz.fuente
Aquí está mi
pathlib
desvinculador de directorio recursivo puro :fuente
Trate
rmtree()
deshutil
de la biblioteca estándar de Pythonfuente
rmtree
Eliminó todo el directorio? Supongo que es similar al unorm -Rf $DIR
es mejor usar la ruta absoluta e importar solo la función rmtree
from shutil import rmtree
ya 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
rm
se alza para quitar y-r
para de forma recursivafuente