Pregunta Eliminar un archivo o carpeta


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


1448
2017-08-09 13:05


origen


Respuestas:


os.remove() eliminará un archivo.

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

shutil.rmtree() eliminará un directorio y todos sus contenidos.


2342
2017-08-09 13:07



Sintaxis de Python para eliminar 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 la carpeta existe o no, solo elimine ese archivo. Esto puede lograrse de dos formas :
    a. os.path.isfile("/path/to/file")
    segundo. Utilizar 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

Ingrese el nombre del archivo para eliminar: demo.txt
Error: demo.txt - No hay tal archivo o directorio.

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

Ingrese el nombre del archivo para eliminar: foo.txt

Sintaxis de Python para eliminar 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))

101
2018-03-07 06:37



Utilizar

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

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

os.remove

y

os.rmdir

(Complete la documentación en os.)


61
2017-08-09 13:09



Para eliminar archivos:

Puedes usar unlink o remove.

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

O

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

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

En Python 2, si la ruta no existe, OSError con [Errno 2] (ENOENT) es elevado. En Python 3, FileNotFoundError con [Errno 2] (ENOENT) es elevado. En Python 3, porque FileNotFoundError es una subclase de OSError, atrapar a este último atrapará al primero.

Para eliminar 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, OSError es elevado. Para eliminar árboles de directorios completos, shutil.rmtree() puede ser usado.

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 a un enlace simbólico a un directorio).

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

Ver también:

os.removedirs(name)

os.removedirs(name) Eliminar directorios recursivamente Funciona como rmdir () excepto que, si el directorio de hojas se elimina con éxito, removedirs () intenta eliminar sucesivamente todos los directorios principales mencionados en la ruta hasta que se produce 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.


50
2017-08-22 12:22



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

22
2018-01-22 09:40



Puedes usar el built-in pathlib módulo (requiere Python 3.4+, pero hay backports para versiones anteriores en PyPI: pathlib, pathlib2)

Para eliminar un archivo, está el unlink método:

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

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

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

17
2017-08-06 20:10



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

Para Python 3, para eliminar el archivo y el directorio individualmente, use el unlink y rmdir  Path métodos de objeto 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 Path objetos, 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 esto está disponible en Python 2 y 3:

from shutil import rmtree

rmtree(dir_path)

Demostración

Nuevo en Python 3.4 es el Path objeto.

Usemos uno para crear un directorio y un archivo para demostrar el uso. Tenga en cuenta que usamos el / para unir las partes de la ruta, esto soluciona los problemas entre los sistemas operativos y los problemas derivados del uso de barras diagonales inversas en Windows (donde necesitaría duplicar sus barras diagonales inversas como \\ o use cadenas sin formato, 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 borrémoslos. 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, creemos algunos archivos para esto:

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

Luego solo itera 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é sucede 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, razón por la cual 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 se ha 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 puedes alias la biblioteca para pathlib

import pathlib2 as pathlib

O solo importa directamente el Path objeto (como se demuestra 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 recursivamente, pero puede adaptarse a su caso de uso.


7
2018-02-12 01:44