Cómo eliminar archivos y carpetas con Python

1 mar 2021 3 min di lettura
Cómo eliminar archivos y carpetas con Python
Indice dei contenuti

Introducción

Python tiene algunos módulos integrados que le permiten eliminar archivos y directorios.

Este tutorial explica cómo eliminar archivos y directorios usando las funciones del módulo os, pathlib y shutil

Eliminar los archivos

En Python puede usar os.remove(), os.unlink(), pathlib.Path.unlink() para eliminar un solo archivo.

El os proporciona una forma portátil de interactuar con el sistema operativo. El módulo está disponible para Python 2 y 3.

Para eliminar un solo archivo con os.remove(), pase la ruta al archivo como argumento:

import os

 file_path = '/tmp/file.txt'
 os.remove(file_path)

Las os.remove() y os.unlink() son semánticamente idénticas:

import os

 file_path = '/tmp/file.txt'
 os.unlink(file_path)

Si el archivo especificado no existe, se FileNotFoundError un FileNotFoundError. Tanto las os.remove() como os.unlink() solo pueden eliminar archivos, no directorios. Si la ruta indicada apunta a un directorio, generarán un IsADirectoryError.

Eliminar un archivo requiere permiso de escritura y ejecución en el directorio que contiene el archivo. De lo contrario, obtendrá un error PermissionError

Para evitar errores al eliminar archivos, puede utilizar el manejo de excepciones para detectar la excepción y enviar un mensaje de error corregido:

import os

 file_path = '/tmp/file.txt'

 try:
 os.remove(file_path)
 except OSError as e:
 print("Error: %s: %s" % (file_path, e.strerror))

El pathlib está disponible en Python 3.4 y versiones posteriores. Si desea utilizar este módulo en Python 2, puede instalarlo con pip. pathlib proporciona una interfaz orientada a objetos para trabajar con rutas de sistema de archivos para diferentes sistemas operativos.

Para eliminar un archivo con el pathlib, cree un Path que apunte al archivo y llame al unlink() en el objeto:

from pathlib import Path

 file_path = Path('/tmp/file.txt')

 try:
 file_path.unlink()
 except OSError as e:
 print("Error: %s: %s" % (file_path, e.strerror))

También se pueden utilizar pathlib.Path.unlink(), os.remove() y os.unlink() para eliminar un enlace simbólico.

Coincidencia de modelo

Puede utilizar el módulo glob para hacer coincidir varios archivos en función de una plantilla. Por ejemplo, para eliminar todos los .txt en el /tmp, debe usar algo como esto:

import os
 import glob

 files = glob.glob('/tmp/*.txt')

 for f in files:
 try:
 f.unlink()
 except OSError as e:
 print("Error: %s: %s" % (f, e.strerror))

Para eliminar recursivamente todos los .txt en el /tmp y todos los subdirectorios debajo de él, pase el recursive=True a la función glob() y use el patrón `` ** `:

import os
 import glob

 files = glob.glob('/tmp/**/*.txt', recursive=True)

 for f in files:
 try:
 os.remove(f)
 except OSError as e:
 print("Error: %s: %s" % (f, e.strerror))

El pathlib incluye dos glob() y rglob() para hacer coincidir archivos en un directorio determinado. glob() coincide con archivos solo en el directorio de nivel superior. rglob() busca de forma recursiva todos los archivos del directorio y todos los subdirectorios. El siguiente código de muestra elimina todos los .txt en el directorio /tmp

from pathlib import Path

 for f in Path('/tmp').glob('*.txt'):
 try:
 f.unlink()
 except OSError as e:
 print("Error: %s: %s" % (f, e.strerror))

Eliminar directorios (carpetas)

En Python, puede usar os.rmdir() y pathlib.Path.rmdir() para eliminar un directorio vacío y shutil.rmtree() para eliminar un directorio no vacío.

El siguiente ejemplo muestra cómo eliminar un directorio vacío:

import os

 dir_path = '/tmp/img'

 try:
 os.rmdir(dir_path)
 except OSError as e:
 print("Error: %s: %s" % (dir_path, e.strerror))

Alternativamente, puede eliminar directorios con el módulo pathlib

from pathlib import Path

 dir_path = Path('/tmp/img')

 try:
 dir_path.rmdir()
 except OSError as e:
 print("Error: %s: %s" % (dir_path, e.strerror))

El shutil permite realizar numerosas operaciones de alto nivel en archivos y directorios.

Con la función shutil.rmtree() es posible eliminar un directorio determinado, incluido su contenido:

import shutil

 dir_path = '/tmp/img'

 try:
 shutil.rmtree(dir_path)
 except OSError as e:
 print("Error: %s: %s" % (dir_path, e.strerror))

El argumento pasado a shutil.rmtree() no puede ser un enlace simbólico a un directorio.

Conclusión

Python proporciona varios módulos para administrar archivos.

Hemos visto cómo usar os.remove(), os.unlink() y pathlib.Path.unlink() para eliminar un solo archivo, os.rmdir() y pathlib.Path.rmdir() para eliminar un directorio vacío y shutil.rmtree() para eliminar de forma recursiva un directorio y todo su contenido.

Tenga especial cuidado al eliminar archivos o directorios, ya que una vez eliminado el archivo, no se puede recuperar fácilmente.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.