Eliminar un archivo o carpeta

¿Cómo eliminar un archivo o carpeta en Python?

os.remove() elimina un archivo.

os.rmdir() elimina un directorio vacío.

shutil.rmtree() borra un directorio y todos sus contenidos.

pathlib.Path.unlink() elimina el archivo o enlace simbólico.

pathlib.Path.rmdir() elimina el directorio vacío.

Sintaxis de Python para borrar un archivo.

 import os os.remove("/tmp/.txt") 

O

 import os os.unlink("/tmp/.txt") 

Mejores prácticas

  1. Primero, verifique si el archivo o carpeta existe o no, luego solo elimine ese archivo. Esto puede lograrse de dos formas :
    a. os.path.isfile("/path/to/file")
    segundo. Utilice el exception handling.

EJEMPLO para os.path.isfile

 #!/usr/bin/python import os myfile="/tmp/foo.txt" ## If file exists, delete it ## if os.path.isfile(myfile): os.remove(myfile) else: ## Show an error ## print("Error: %s file not found" % myfile) 

Manejo de excepciones

 #!/usr/bin/python import os ## Get input ## myfile= raw_input("Enter file name to delete: ") ## Try to delete the file ## try: os.remove(myfile) except OSError as e: ## if failed, report it back to the user ## print ("Error: %s - %s." % (e.filename, e.strerror)) 

SALIDA RESPECTIVA

 Introduzca el nombre del archivo a eliminar: demo.txt
 Error: demo.txt - No existe tal archivo o directorio.

 Introduzca el nombre del archivo a eliminar: rrr.txt
 Error: rrr.txt - Operación no permitida.

 Introduzca el nombre del archivo a eliminar: foo.txt

Sintaxis de Python para borrar una carpeta.

 shutil.rmtree() 

Ejemplo para shutil.rmtree()

 #!/usr/bin/python import os import sys import shutil # Get directory name mydir= raw_input("Enter directory name: ") ## Try to remove tree; if failed show an error using try...except on screen try: shutil.rmtree(mydir) except OSError as e: print ("Error: %s - %s." % (e.filename, e.strerror)) 

Utilizar

 shutil.rmtree(path[, ignore_errors[, onerror]]) 

(Ver la documentación completa en shutil ) y / o

 os.remove 

y

 os.rmdir 

(Documentación completa en os .)

Para borrar archivos:

Puedes usar unlink o remove .

 os.unlink(path, *, dir_fd=None) 

O

 os.remove(path, *, dir_fd=None) 

Esta función elimina (borra) la ruta del archivo. Si la ruta es un directorio, se OSError .

En Python 2, si la ruta no existe, se OSError con [Errno 2] ( ENOENT ). En Python 3, FileNotFoundError con [Errno 2] ( ENOENT ) se ENOENT . En Python 3, dado que FileNotFoundError es una subclase de OSError , la captura de este último capturará la primera.

Para borrar carpetas:

 os.rmdir(path, *, dir_fd=None) 

rmdir Eliminar (eliminar) la ruta del directorio. Solo funciona cuando el directorio está vacío, de lo contrario, se genera OSError . Para eliminar árboles de directorios completos, se puede utilizar shutil.rmtree() .

 shutil.rmtree(path, ignore_errors=False, onerror=None) 

shutil.rmtree Eliminar un árbol de directorios completo. La ruta debe apuntar a un directorio (pero no un enlace simbólico a un directorio).

Si ignore_errors es verdadero, los errores resultantes de eliminaciones fallidas se ignorarán y si son falsos u omitidos, dichos errores se manejan llamando a un controlador especificado por onerror o, si se omite, provocan una excepción.

Ver también:

 os.removedirs(name) 

os.removedirs(name) Eliminar directorios de forma recursiva. Funciona como rmdir () excepto que, si el directorio de hoja se elimina exitosamente, removeirs () intenta eliminar sucesivamente todos los directorios principales mencionados en la ruta hasta que se genere un error (que se ignora, porque generalmente significa que un directorio principal no está vacío) ).

Por ejemplo, os.removedirs (‘foo / bar / baz’) primero eliminará el directorio ‘foo / bar / baz’, y luego eliminará ‘foo / bar’ y ‘foo’ si están vacíos.

Crea una función para ustedes.

 def remove(path): """ param  could either be relative or absolute. """ if os.path.isfile(path): os.remove(path) # remove the file elif os.path.isdir(path): shutil.rmtree(path) # remove dir and all contains else: raise ValueError("file {} is not a file or dir.".format(path)) 

Puede usar el módulo pathlib (requiere Python 3.4+, pero hay versiones pathlib para versiones anteriores en PyPI: pathlib , pathlib2 ).

Para eliminar un archivo existe el método de unlink :

 import pathlib path = pathlib.Path(name_of_file) path.unlink() 

O el método rmdir para eliminar una carpeta vacía :

 import pathlib path = pathlib.Path(name_of_folder) path.rmdir() 

¿Cómo elimino un archivo o carpeta en Python?

Para Python 3, para eliminar el archivo y el directorio de forma individual, use los métodos de objeto rmdir y rmdir Path respectivamente:

 from pathlib import Path dir_path = Path.home() / 'directory' file_path = dir_path / 'file' file_path.unlink() # remove file dir_path.rmdir() # remove directory 

Tenga en cuenta que también puede usar rutas relativas con objetos de Path , y puede verificar su directorio de trabajo actual con Path.cwd .

Para eliminar archivos y directorios individuales en Python 2, consulte la sección etiquetada a continuación.

Para eliminar un directorio con contenido, use shutil.rmtree y tenga en cuenta que está disponible en Python 2 y 3:

 from shutil import rmtree rmtree(dir_path) 

Demostración

Nuevo en Python 3.4 es el objeto Path .

Usemos uno para crear un directorio y un archivo para demostrar el uso. Tenga en cuenta que usamos / para unir las partes de la ruta, esto soluciona los problemas entre los sistemas operativos y los problemas del uso de barras invertidas en Windows (donde debería duplicar las barras invertidas como \\ o usar cadenas en bruto, como r"foo\bar" ):

 from pathlib import Path # .home() is new in 3.5, otherwise use os.path.expanduser('~') directory_path = Path.home() / 'directory' directory_path.mkdir() file_path = directory_path / 'file' file_path.touch() 

y ahora:

 >>> file_path.is_file() True 

Ahora vamos a eliminarlos. Primero el archivo:

 >>> file_path.unlink() # remove file >>> file_path.is_file() False >>> file_path.exists() False 

Podemos usar globos para eliminar varios archivos. Primero, creamos algunos archivos para esto:

 >>> (directory_path / 'foo.my').touch() >>> (directory_path / 'bar.my').touch() 

Luego simplemente iterar sobre el patrón glob:

 >>> for each_file_path in directory_path.glob('*.my'): ... print(f'removing {each_file_path}') ... each_file_path.unlink() ... removing ~/directory/foo.my removing ~/directory/bar.my 

Ahora, demostrando eliminar el directorio:

 >>> directory_path.rmdir() # remove directory >>> directory_path.is_dir() False >>> directory_path.exists() False 

¿Qué pasa si queremos eliminar un directorio y todo lo que contiene? Para este caso de uso, use shutil.rmtree

Vamos a recrear nuestro directorio y archivo:

 file_path.parent.mkdir() file_path.touch() 

y tenga en cuenta que rmdir falla a menos que esté vacío, por lo que rmtree es tan conveniente:

 >>> directory_path.rmdir() Traceback (most recent call last): File "", line 1, in  File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir self._accessor.rmdir(self) File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped return strfunc(str(pathobj), *args) OSError: [Errno 39] Directory not empty: '/home/excelsiora/directory' 

Ahora, importe rmtree y pase el directorio a la función:

 from shutil import rmtree rmtree(directory_path) # remove everything 

Y podemos ver que todo ha sido eliminado:

 >>> directory_path.exists() False 

Python 2

Si estás en Python 2, hay un backport del módulo pathlib llamado pathlib2 , que se puede instalar con pip:

 $ pip install pathlib2 

Y luego puede alias la biblioteca a pathlib

 import pathlib2 as pathlib 

O simplemente importe directamente el objeto Path (como se muestra aquí):

 from pathlib2 import Path 

Si eso es demasiado, puede eliminar archivos con os.remove o os.unlink

 from os import unlink, remove from os.path import join, expanduser remove(join(expanduser('~'), 'directory/file')) 

o

 unlink(join(expanduser('~'), 'directory/file')) 

y puedes eliminar directorios con os.rmdir :

 from os import rmdir rmdir(join(expanduser('~'), 'directory')) 

Tenga en cuenta que también hay un os.removedirs : solo elimina los directorios vacíos de forma recursiva, pero puede adaptarse a su caso de uso.

shutil.rmtree es la función asíncrona, por lo que si desea verificar cuando se complete, puede usar while … loop

 import os import shutil shutil.rmtree(path) while os.path.exists(path): pass print('done') 
 import os folder = '/Path/to/yourDir/' fileList = os.listdir(folder) for f in fileList: filePath = folder + '/'+f if os.path.isfile(filePath): os.remove(filePath) elif os.path.isdir(filePath): newFileList = os.listdir(filePath) for f1 in newFileList: insideFilePath = filePath + '/' + f1 if os.path.isfile(insideFilePath): os.remove(insideFilePath) 

Recomiendo usar subprocess si escribir un código hermoso y legible es su taza de té:

 import subprocess subprocess.Popen("rm -r my_dir", shell=True) 

Y si no eres un ingeniero de software, entonces considera usar Jupyter; simplemente puede escribir comandos bash:

 !rm -r my_dir 

Tradicionalmente, usas shutil :

 import shutil shutil.rmtree(my_dir)