una - recorrer directorios en python




Eliminar un archivo o carpeta (7)

¿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.


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()

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)






delete-file