Sriram
Tengo un problema con la eliminación de 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 estoy pasando el directorio donde se debe realizar 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 borra! Pero las carpetas 25
y 26
no se eliminan, aunque sean 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?
Tomek
Probar shutil.rmtree
:
import shutil
shutil.rmtree('/path/to/your/dir/')
-
¿El
rmtree
borrado todo el directorio? Supongo que es similar a larm -Rf $DIR
– Sriram
29 de octubre de 2012 a las 8:31
-
Tenga cuidado ya que rmtree también elimina los archivos. Como se le preguntó, la pregunta era cómo eliminar directorios VACÍOS. Los documentos para os.walk dan un ejemplo que coincide casi exactamente con esta pregunta:
import os for root, dirs, files in os.walk(top, topdown=False): for name in dirs: os.rmdir(os.path.join(root, name))
– Dave Sawyer
30 de noviembre de 2018 a las 18:32
mitch
Aquí está mi puro pathlib
Desvinculador de directorio recursivo:
from pathlib import Path
def rmdir(directory):
directory = Path(directory)
for item in directory.iterdir():
if item.is_dir():
rmdir(item)
else:
item.unlink()
directory.rmdir()
rmdir(Path("dir/"))
-
Supongamos que es mejor que shutil, por lo tanto, shutil es asincrónico.
– Olga Pshenichnikova
29 de abril de 2021 a las 11:29
-
Muy bonito, y un ejemplo tangible de recursividad como bonificación.
– Nesha25
30 de marzo a las 16:56
lqs
El comportamiento predeterminado de os.walk()
es caminar de la raíz a la hoja. Establecer topdown=False
en os.walk()
caminar de la hoja a la raíz.
microo8
Probar rmtree()
en shutil
de la biblioteca estándar de Python
Gajender
mejor usar la ruta absoluta e importar solo la función rmtree
from shutil import rmtree
como se trata de un paquete grande, la línea anterior solo importará la función requerida.
from shutil import rmtree
rmtree('directory-absolute-path')
Justo Wingert
Solo para el próximo tipo que busque una solución de micropython, esto funciona puramente en función del sistema operativo (listdir, remove, rmdir). No es completo (especialmente en el manejo de errores) ni elegante; sin embargo, funcionará en la mayoría de las circunstancias.
def deltree(target):
print("deltree", target)
for d in os.listdir(target):
try:
deltree(target + "https://stackoverflow.com/" + d)
except OSError:
os.remove(target + "https://stackoverflow.com/" + d)
os.rmdir(target)
Azat Ibrakov
El comando (dado por Tomek) no puedo eliminar un archivo, si es solo lectura. por lo tanto, uno puede usar –
import os, sys
import stat
def del_evenReadonly(action, name, exc):
os.chmod(name, stat.S_IWRITE)
os.remove(name)
if os.path.exists("test/qt_env"):
shutil.rmtree('test/qt_env',onerror=del_evenReadonly)
-
al intentar eliminar su código con mi propia carpeta, aparece un error que dice:
NameError: name 'stat' is not defined
. ¿Cómo se ha definido?– nako
30 de julio de 2018 a las 15:22
-
El módulo stat define constantes y funciones para interpretar los resultados de os.stat(), os.fstat() y os.lstat(). lo que puede intentar: importar sistema operativo, sistema de importación de estadísticas *
– monir
6 de agosto de 2018 a las 12:59
¿estás seguro de que no tienen archivos ocultos?
– Jeff
29 de octubre de 2012 a las 8:22
¿Se imprime una excepción o un rastreo? Si es así, ayudaría si agregara eso a la pregunta
–Ngure Nyaga
29 de octubre de 2012 a las 8:23
@Jeff: Sí, estoy seguro. De hecho en mi máquina ubuntu probé
rmdir /path/to/25th/folder
está borrando todo el directorio. ¡Lo que significa que ese directorio está vacío!– Sriram
29 de octubre de 2012 a las 8:29
Posible duplicado de ¿Cómo elimino/elimino una carpeta que no está vacía con Python? tanto de la pregunta como de la respuesta
– Trevor Boyd Smith
17/10/2016 a las 21:27