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")
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 laPurePath
clase que se define en elpathlib
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 solois_dir()
?– Don Escotilla
24 de septiembre de 2022 a las 6:00
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
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
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
@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