una recorrer manejo linea eliminar directorios datos copiar con carpetas archivos archivo python file-io folder delete-file

python - recorrer - Eliminar un archivo o carpeta



python 3 eliminar archivo (10)

¿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 pathlib.Path.rmdir y pathlib.Path.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 globbing 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 global:

>>> 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 "<stdin>", line 1, in <module> 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 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.

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


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 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 cada directorio principal mencionado 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.


Sintaxis de Python para borrar un archivo.

import os os.remove("/tmp/<file_name>.txt")

O

import os os.unlink("/tmp/<file_name>.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

Enter file name to delete : demo.txt Error: demo.txt - No such file or directory. Enter file name to delete : rrr.txt Error: rrr.txt - Operation not permitted. Enter file name to delete : 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))


Crea una función para ustedes.

def remove(path): """ param <path> 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()


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)


Utilizar

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

(Ver documentación completa sobre shutil ) y / o

os.remove

y

os.rmdir

(Documentación completa en os.remove() .)


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)