Cómo comprobar si un archivo existe en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio (lab), aprenderás cómo comprobar si un archivo existe en Python utilizando diferentes métodos. El laboratorio comienza con una introducción a las rutas de archivos (file paths), explicando la diferencia entre rutas absolutas y relativas. Crearás un archivo de texto de muestra y un script de Python para demostrar cómo obtener el directorio de trabajo actual y definir tanto rutas relativas como absolutas al archivo.

A continuación, el laboratorio te guiará a través del uso de la función os.path.exists() y el objeto pathlib.Path para verificar la existencia de un archivo. Estos métodos proporcionan formas confiables de determinar si un archivo existe antes de intentar leer o escribir en él, evitando posibles errores en tus programas de Python.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/build_in_functions -.-> lab-559511{{"Cómo comprobar si un archivo existe en Python"}} python/importing_modules -.-> lab-559511{{"Cómo comprobar si un archivo existe en Python"}} python/standard_libraries -.-> lab-559511{{"Cómo comprobar si un archivo existe en Python"}} python/file_operations -.-> lab-559511{{"Cómo comprobar si un archivo existe en Python"}} python/os_system -.-> lab-559511{{"Cómo comprobar si un archivo existe en Python"}} end

Introducción a las rutas de archivos (File Paths)

En este paso, exploraremos el concepto de rutas de archivos en Python. Comprender las rutas de archivos es crucial para leer y escribir en archivos, así como para navegar por el sistema de archivos en tus programas de Python.

Una ruta de archivo es esencialmente la dirección de un archivo o directorio en tu computadora. Hay dos tipos principales de rutas de archivos:

  • Rutas absolutas (Absolute paths): Estas rutas proporcionan la ubicación completa de un archivo o directorio, comenzando desde el directorio raíz de tu sistema de archivos. Por ejemplo, en un sistema Linux, una ruta absoluta podría ser /home/labex/project/my_file.txt.
  • Rutas relativas (Relative paths): Estas rutas especifican la ubicación de un archivo o directorio en relación con tu directorio de trabajo actual. Por ejemplo, si tu directorio de trabajo actual es /home/labex/project, entonces la ruta relativa my_file.txt se referiría al mismo archivo que la ruta absoluta /home/labex/project/my_file.txt.

Comencemos creando un simple archivo de texto en tu directorio ~/project utilizando el editor VS Code. Crea un nuevo archivo llamado my_file.txt y agrega el siguiente contenido:

Hello, LabEx!
This is a test file.

Guarda el archivo en el directorio ~/project.

Ahora, creemos un script de Python para interactuar con este archivo. Crea un nuevo archivo llamado file_paths.py en el mismo directorio ~/project y agrega el siguiente código:

import os

## Get the current working directory
current_directory = os.getcwd()
print("Current working directory:", current_directory)

## Define a relative path to the file
relative_path = "my_file.txt"
print("Relative path:", relative_path)

## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)
print("Absolute path:", absolute_path)

En este script:

  • Importamos el módulo os, que proporciona funciones para interactuar con el sistema operativo.
  • Usamos os.getcwd() para obtener el directorio de trabajo actual.
  • Definimos una ruta relativa al archivo my_file.txt.
  • Usamos os.path.join() para combinar el directorio de trabajo actual y la ruta relativa para crear una ruta absoluta.

Ahora, ejecutemos el script. Abre tu terminal en VS Code y navega al directorio ~/project (por defecto ya deberías estar allí). Luego, ejecuta el script utilizando el siguiente comando:

python file_paths.py

Deberías ver una salida similar a esta:

Current working directory: /home/labex/project
Relative path: my_file.txt
Absolute path: /home/labex/project/my_file.txt

Esto demuestra cómo obtener el directorio de trabajo actual y construir tanto rutas de archivos relativas como absolutas en Python. Comprender estos conceptos es fundamental para trabajar con archivos y directorios en tus programas de Python.

Uso de os.path.exists()

En este paso, aprenderemos cómo utilizar la función os.path.exists() para comprobar si un archivo o directorio existe. Esta es una operación fundamental cuando se trabaja con archivos, ya que te permite manejar casos en los que un archivo podría faltar o un directorio podría no estar presente.

La función os.path.exists() toma un solo argumento: la ruta al archivo o directorio que deseas comprobar. Devuelve True si el archivo o directorio existe, y False en caso contrario.

Modifiquemos el script file_paths.py que creamos en el paso anterior para utilizar os.path.exists(). Abre el archivo file_paths.py en tu editor de VS Code y agrega el siguiente código:

import os

## Get the current working directory
current_directory = os.getcwd()

## Define a relative path to the file
relative_path = "my_file.txt"

## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)

## Check if the file exists using the relative path
if os.path.exists(relative_path):
    print("The relative path 'my_file.txt' exists.")
else:
    print("The relative path 'my_file.txt' does not exist.")

## Check if the file exists using the absolute path
if os.path.exists(absolute_path):
    print("The absolute path", absolute_path, "exists.")
else:
    print("The absolute path", absolute_path, "does not exist.")

## Check if a directory exists
directory_path = current_directory
if os.path.exists(directory_path):
    print("The directory", directory_path, "exists.")
else:
    print("The directory", directory_path, "does not exist.")

## Check if a non-existent file exists
non_existent_file = "non_existent_file.txt"
if os.path.exists(non_existent_file):
    print("The file", non_existent_file, "exists.")
else:
    print("The file", non_existent_file, "does not exist.")

En este script:

  • Utilizamos os.path.exists() para comprobar si el archivo my_file.txt existe, tanto con la ruta relativa como con la absoluta.
  • También comprobamos si el directorio actual existe, lo cual siempre debería ser el caso.
  • Finalmente, comprobamos si un archivo que no existe está presente, lo que debería devolver False.

Ahora, ejecutemos el script nuevamente. Abre tu terminal en VS Code y ejecuta el script utilizando el siguiente comando:

python file_paths.py

Deberías ver una salida similar a esta:

The relative path 'my_file.txt' exists.
The absolute path /home/labex/project/my_file.txt exists.
The directory /home/labex/project exists.
The file non_existent_file.txt does not exist.

Esto demuestra cómo utilizar os.path.exists() para verificar la existencia de archivos y directorios en tus programas de Python. Este es un paso crucial antes de intentar leer o escribir en un archivo, ya que puede prevenir errores y garantizar que tu programa se comporte como se espera.

Verificación con pathlib.Path

En este paso, exploraremos el módulo pathlib, que proporciona una forma orientada a objetos de interactuar con archivos y directorios. Nos centraremos específicamente en utilizar pathlib.Path para verificar la existencia de archivos y directorios, ofreciendo una alternativa a os.path.exists().

El módulo pathlib ofrece un enfoque más moderno e intuitivo para la manipulación de rutas de archivos en comparación con el más antiguo módulo os.path. Representa las rutas de archivos como objetos, lo que te permite realizar diversas operaciones utilizando métodos de esos objetos.

Modifiquemos el script file_paths.py con el que hemos estado trabajando para utilizar pathlib.Path. Abre el archivo file_paths.py en tu editor de VS Code y agrega el siguiente código:

import os
from pathlib import Path

## Get the current working directory
current_directory = os.getcwd()

## Define a relative path to the file
relative_path = "my_file.txt"

## Define an absolute path to the file
absolute_path = os.path.join(current_directory, relative_path)

## Create Path objects for relative and absolute paths
relative_path_obj = Path(relative_path)
absolute_path_obj = Path(absolute_path)

## Check if the file exists using the relative path object
if relative_path_obj.exists():
    print("The relative path 'my_file.txt' exists (using pathlib).")
else:
    print("The relative path 'my_file.txt' does not exist (using pathlib).")

## Check if the file exists using the absolute path object
if absolute_path_obj.exists():
    print("The absolute path", absolute_path, "exists (using pathlib).")
else:
    print("The absolute path", absolute_path, "does not exist (using pathlib).")

## Check if a directory exists using pathlib
directory_path_obj = Path(current_directory)
if directory_path_obj.exists():
    print("The directory", current_directory, "exists (using pathlib).")
else:
    print("The directory", current_directory, "does not exist (using pathlib).")

## Check if a non-existent file exists using pathlib
non_existent_file = "non_existent_file.txt"
non_existent_path_obj = Path(non_existent_file)
if non_existent_path_obj.exists():
    print("The file", non_existent_file, "exists (using pathlib).")
else:
    print("The file", non_existent_file, "does not exist (using pathlib).")

En este script:

  • Importamos la clase Path del módulo pathlib.
  • Creamos objetos Path tanto para la ruta relativa como para la absoluta del archivo my_file.txt.
  • Utilizamos el método exists() de los objetos Path para comprobar si el archivo existe.
  • También comprobamos la existencia del directorio actual y de un archivo que no existe utilizando pathlib.

Ahora, ejecutemos el script nuevamente. Abre tu terminal en VS Code y ejecuta el script utilizando el siguiente comando:

python file_paths.py

Deberías ver una salida similar a esta:

The relative path 'my_file.txt' exists (using pathlib).
The absolute path /home/labex/project/my_file.txt exists (using pathlib).
The directory /home/labex/project exists (using pathlib).
The file non_existent_file.txt does not exist (using pathlib).

Esto demuestra cómo utilizar pathlib.Path como alternativa a os.path.exists() para verificar la existencia de archivos y directorios. El módulo pathlib ofrece una forma más orientada a objetos y, a menudo, más legible de interactuar con rutas de archivos en Python.

Resumen

En este laboratorio (lab), comenzamos explorando el concepto de rutas de archivos en Python, diferenciando entre rutas absolutas y relativas. Aprendimos que las rutas absolutas proporcionan la ubicación completa de un archivo, mientras que las rutas relativas especifican la ubicación en relación con el directorio de trabajo actual.

Luego, creamos un archivo de texto llamado my_file.txt y un script de Python file_paths.py para demostrar cómo obtener el directorio de trabajo actual utilizando os.getcwd() y cómo definir tanto rutas relativas como absolutas al archivo creado utilizando el módulo os.