¿Cómo verificar la existencia de una carpeta con python y luego eliminarla?

4 minutos de lectura

avatar de usuario de sara
Sara

Quiero eliminar la carpeta del conjunto de datos de la carpeta dataset3. Pero el siguiente código no elimina el conjunto de datos. Primero quiero verificar si el conjunto de datos ya existe en el conjunto de datos y luego eliminar el conjunto de datos.
¿Alguien puede señalar mi error al seguir el código?

for files in os.listdir("dataset3"):
    if os.path.exists("dataset"):
        os.system("rm -rf "+"dataset")

  • @HFBrowning: eso no es demasiado efectivo contra los directorios.

    – tdelaney

    3 mayo 2017 a las 16:13

  • no usas el files nombre de archivo e incluso si lo hizo, debe agregarle la ruta original (‘dataset3’).

    – tdelaney

    3 mayo 2017 a las 16:15

  • Entonces como puedo hacer eso

    -sara

    3 mayo 2017 a las 16:16

  • Por carpeta de conjunto de datos, ¿se llama literalmente “conjunto de datos”?

    – tdelaney

    3 mayo 2017 a las 16:17

  • Si conoce el nombre del directorio, no es necesario realizar ninguna comprobación. os.system("rm -rf dataset3/dataset") hace el trabajo.

    – tdelaney

    3 mayo 2017 a las 16:19

avatar de usuario de martineau
martineau

de pitón os.rmdir() solo funciona al vaciar los directorios, sin embargo shutil.rmtree() no le importa (incluso si hay subdirectorios), lo que lo hace muy similar a Linux rm -rf dominio.

import os
import shutil

dirpath = os.path.join('dataset3', 'dataset')
if os.path.exists(dirpath) and os.path.isdir(dirpath):
    shutil.rmtree(dirpath)

Enfoque moderno

En Python 3.4+ puedes hacer lo mismo usando el pathlib módulo para hacer que el código sea más legible y orientado a objetos:

from pathlib import Path
import shutil

dirpath = Path('dataset3') / 'dataset'
if dirpath.exists() and dirpath.is_dir():
    shutil.rmtree(dirpath)

  • Es Path una ruta relativa? Prefiero caminos absolutos como es el sentido común.

    – Timo

    3 de julio de 2021 a las 14:45

  • @Timo: En este caso su valor pasa a ser relativo. A Path es una subclase de la PurePath clase que se define en el pathlib módulo y no son absolutos ni relativos per se, pueden ser cualquiera de los dos. Estas clases facilitan el acceso a los componentes de la ruta y permiten realizar operaciones en ellos de forma orientada a objetos. También tenga en cuenta que, en algún momento, usar una ruta relativa tiene mucho sentido, como cuando no desea codificar una ruta absoluta en su código o no sabe cuál es la carpeta raíz hasta el tiempo de ejecución.

    – martineau

    3 de julio de 2021 a las 15:27

  • tanto en fragmentos de código antiguos como modernos, ¿no es exists() and is_dir() lo mismo que solo is_dir() ?

    – Don Escotilla

    24 de septiembre de 2022 a las 6:00

Avatar de usuario de Huang Yen Hao
Huang Yen Hao

os.remove() es eliminar un archivo.

os.rmdir() es eliminar un directorio vacío.

shutil.rmtree() es eliminar un directorio y todo su contenido.

import os

folder = "dataset3/"

# Method 1
for files in os.listdir(folder):
    if files == "dataset":
        os.remove(folder + "dataset")

# Method 2
if os.path.exists(folder + "dataset"):
    os.remove(folder + "dataset")

mejor poner ignore_errors:

import shutil

shutil.rmtree('/folder_name', ignore_errors=True)

Esto es mucho más legible y conciso.

Tenga en cuenta que ignorará todo errores, no solo errores de directorio que faltan.

  • Sí, así que es mejor no hacer esto, de verdad 🙂 – De lo contrario, no sabrá si no pudo borrar la carpeta.

    – O´Rooney

    5 de agosto de 2022 a las 0:21


avatar de usuario de dede
dede

prueba esto:

for files in os.listdir("dataset3"):
  if files=="dataset":
    fn=os.path.join("dataset3", files)
    os.system("rm -rf "+fn)
    break

No necesita os.path.exists() porque os.listdir() ya le dijo que existe.

Y si los nombres de sus carpetas son estáticos, puede hacerlo con:

if os.path.exists("dataset3/dataset"):
  os.system("rm -rf dataset3/dataset")

o como:

try:
  os.system("rm -rf dataset3/dataset")
except:
  pass

avatar de usuario de lch
lch

Esto lo hará:

for files in os.listdir('dataset3'):
     if files == 'dataset':
         os.rmdir(os.path.join(os.getcwd() + 'dataset3', files))

  • Para os.path.join()no necesita/no desea incluir la barra inclinada inicial en el '/dataset3'.

    – martineau

    3 mayo 2017 a las 16:31


  • @martineau arreglado!

    – lch

    3 mayo 2017 a las 22:44

  • Para os.path.join()no necesita/no desea incluir la barra inclinada inicial en el '/dataset3'.

    – martineau

    3 mayo 2017 a las 16:31


  • @martineau arreglado!

    – lch

    3 mayo 2017 a las 22:44

¿Ha sido útil esta solución?