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

11 minutos de lectura

Avatar de usuario de Zygimantas
Zygimantas

¿Cómo puedo eliminar un archivo o una carpeta?

Avatar de usuario de RichieHindle
RichieHindle


Path objetos de Python 3.4+ pathlib El módulo también expone estos métodos de instancia:

  • os.rmdir() en Windows también elimina el enlace simbólico del directorio incluso si el directorio de destino no está vacío

    – Ilya Serbia

    18 de diciembre de 2015 a las 17:23

  • Si el archivo no existe, os.remove() lanza una excepción, por lo que puede ser necesario verificar os.path.isfile() primero, o envolver en una try.

    usuario1142217

    4 julio 2018 a las 0:00

  • solo para completar … la excepción lanzada por os.remove() si un archivo no existe es FileNotFoundError.

    – PedroA

    4 de febrero de 2020 a las 17:52

  • Lo hace os.remove() ¿Toma múltiples argumentos para eliminar varios archivos, o lo llama cada vez para cada archivo?

    – usuario324747

    9 mayo 2020 a las 23:57

  • @Jérôme creo missing_ok=True, adicional en 3.8 resuelve eso!

    – Félix

    8 dic 2020 a las 21:04

Avatar de usuario de Anand Tripathi
Anand Tripathi

Sintaxis de Python para eliminar un archivo

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

o

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

o

rutalib Biblioteca para la versión de Python >= 3.4

file_to_rem = pathlib.Path("/tmp/<file_name>.txt")
file_to_rem.unlink()

Ruta.unlink(missing_ok=Falso)

Método de desvinculación utilizado para eliminar el archivo o el vínculo simbólico.

  • Si falta_ok es falso (el valor predeterminado), se genera FileNotFoundError si la ruta no existe.
  • Si falta_ok es verdadero, se ignorarán las excepciones de FileNotFoundError (el mismo comportamiento que el comando POSIX rm -f).
  • Cambiado en la versión 3.8: Se agregó el parámetro faltante_ok.

Mejores prácticas

Primero, verifique si el archivo o carpeta existe y luego elimínelo. Puedes lograr esto de dos maneras:

  1. os.path.isfile("/path/to/file")
  2. Usar exception handling.

EJEMPLO por 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:
    # If it fails, inform the user.
    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 it fails, inform 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 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 the tree; if it fails, throw an error using try...except.
try:
    shutil.rmtree(mydir)
except OSError as e:
    print("Error: %s - %s." % (e.filename, e.strerror))

  • Se recomienda el manejo de excepciones sobre la verificación porque el archivo podría eliminarse o cambiarse entre las dos líneas (TOCTOU: en.wikipedia.org/wiki/Time_of_check_to_time_of_use) Ver preguntas frecuentes sobre Python docs.python.org/3/glossary.html#term-eafp

    – Merwok

    22 mayo 2019 a las 21:37


  • También EAFP se prefiere sobre LBI en Python.

    -jaaq

    2 de noviembre de 2020 a las 13:07

  • ¿Cuál es el punto de capturar la excepción en el último ejemplo?

    – Welgriv

    5 de julio de 2021 a las 7:46

Avatar de usuario de Mihai Maruseac
Mihai Maruseac

Usar

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

(Ver documentación completa en cerrar) y/o

os.remove

y

os.rmdir

(Documentación completa sobre sistema operativo.)

  • Agregue la interfaz pathlib (nueva desde Python 3.4) a su lista.

    – Paebbels

    25/04/2016 a las 19:38

avatar de usuario de flycee
Flycee

Aquí hay una función robusta que usa ambos os.remove y shutil.rmtree:

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(path) or os.path.islink(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))

Avatar de usuario de MSeifert
MSeifert

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

Para eliminar un archivo existe el unlink método:

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

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

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

  • Sin embargo, ¿qué pasa con un directorio no vacío?

    – Pranasas

    11 de julio de 2018 a las 8:43

  • @Pranasas Lamentablemente, parece que no hay nada (de forma nativa) en pathlib que puede manejar la eliminación de directorios no vacíos. Sin embargo, podrías usar shutil.rmtree. Se ha mencionado en varias de las otras respuestas, así que no lo he incluido.

    – MSeifert

    11 de julio de 2018 a las 8:46


Avatar de usuario de DS_ShraShetty
DS_Shra Shetty

Eliminar un archivo o carpeta en Python

Hay varias formas de eliminar un archivo en Python, pero las mejores son las siguientes:

  1. os.remove() elimina un archivo.
  2. os.unlink() elimina un archivo. es un nombre Unix del método remove().
  3. shutil.rmtree() elimina un directorio y todo su contenido.
  4. pathlib.Path.unlink() elimina un solo archivo El módulo pathlib está disponible en Python 3.4 y superior.

os.remove()

Ejemplo 1: Ejemplo básico para eliminar un archivo utilizando el método os.remove().

import os
os.remove("test_file.txt")
print("File removed successfully")

Ejemplo 2: verificar si el archivo existe usando os.path.isfile y eliminarlo con os.remove

import os
#checking if file exist or not
if(os.path.isfile("test.txt")):
    #os.remove() function to remove the file
    os.remove("test.txt")
    #Printing the confirmation message of deletion
    print("File Deleted successfully")
else:
print("File does not exist")
#Showing the message instead of throwig an error

Ejemplo 3: programa de Python para eliminar todos los archivos con una extensión específica

import os 
from os import listdir
my_path="C:\Python Pool\Test\"
for file_name in listdir(my_path):
    if file_name.endswith('.txt'):
        os.remove(my_path + file_name)

Ejemplo 4: programa de Python para eliminar todos los archivos dentro de una carpeta

Para eliminar todos los archivos dentro de un directorio en particular, simplemente debe usar el símbolo * como cadena de patrón. #Importación de módulos os y glob import os, glob #Loop A través de la carpeta proyecta todos los archivos y los elimina uno por uno para el archivo en glob.glob(“pythonpool/*”): os.remove(file) print(“Deleted ” + cadena (archivo))

os.unlink()

os.unlink() es un alias u otro nombre de os.remove() . Al igual que en el sistema operativo Unix, eliminar también se conoce como desvincular. Nota: Todas las funcionalidades y sintaxis son las mismas de os.unlink() y os.remove(). Ambos se utilizan para eliminar la ruta del archivo de Python. Ambos son métodos en el módulo os en las bibliotecas estándar de Python que realizan la función de eliminación.

shutil.rmtree()

Ejemplo 1: programa de Python para eliminar un archivo mediante shutil.rmtree()

import shutil 
import os 
# location 
location = "E:/Projects/PythonPool/"
# directory 
dir = "Test"
# path 
path = os.path.join(location, dir) 
# removing directory 
shutil.rmtree(path) 

Ejemplo 2: programa de Python para eliminar un archivo usando shutil.rmtree()

import shutil 
import os 
location = "E:/Projects/PythonPool/"
dir = "Test"    
path = os.path.join(location, dir) 
shutil.rmtree(path) 

pathlib.Path.rmdir() para eliminar el directorio vacío

El módulo Pathlib proporciona diferentes formas de interactuar con sus archivos. Rmdir es una de las funciones de ruta que le permite eliminar una carpeta vacía. En primer lugar, debe seleccionar Path() para el directorio, y luego llamar al método rmdir() verificará el tamaño de la carpeta. Si está vacío, lo eliminará.

Esta es una buena manera de eliminar carpetas vacías sin temor a perder datos reales.

from pathlib import Path
q = Path('foldername')
q.rmdir()

  • Sin embargo, ¿qué pasa con un directorio no vacío?

    – Pranasas

    11 de julio de 2018 a las 8:43

  • @Pranasas Lamentablemente, parece que no hay nada (de forma nativa) en pathlib que puede manejar la eliminación de directorios no vacíos. Sin embargo, podrías usar shutil.rmtree. Se ha mencionado en varias de las otras respuestas, así que no lo he incluido.

    – MSeifert

    11 de julio de 2018 a las 8:46


¿Cómo elimino un archivo o una 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 utilizar 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 así etiquetada a continuación.

Para eliminar un directorio con contenido, use shutil.rmtreey 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 del uso de barras invertidas en Windows (donde necesitaría duplicar sus 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, creemos algunos archivos para esto:

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

Luego simplemente itera 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 la eliminación del 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, utilice shutil.rmtree

Recreemos 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/username/directory'

Ahora importa rmtree y pasa 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

Pitón 2

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

$ pip install pathlib2

Y luego puede crear un alias para la biblioteca pathlib

import pathlib2 as pathlib

O simplemente importar 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 directorios vacíos de forma recursiva, pero puede adaptarse a su caso de uso.

  • rmtree(directory_path) funciona en python 3.6.6 pero no en python 3.5.2 – necesita rmtree(str(directory_path))) allá.

    – Stein

    22 de agosto de 2018 a las 8:48

¿Ha sido útil esta solución?