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.