"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué las rutas relativas en proyectos de Python provocan errores de archivo no encontrado?

¿Por qué las rutas relativas en proyectos de Python provocan errores de archivo no encontrado?

Publicado el 2024-11-07
Navegar:194

Why Do Relative Paths in Python Projects Lead to File Not Found Errors?

Acceso a archivos con rutas relativas en proyectos de Python

Al manipular archivos dentro de un proyecto de Python, a menudo se emplean rutas relativas por conveniencia. Sin embargo, su comportamiento puede volverse ambiguo, especialmente cuando se trata de estructuras de proyectos de varios niveles.

Considere el siguiente diseño de proyecto:

project
    /data
        test.csv
    /package
        __init__.py
        module.py
    main.py

Módulo module.py intenta leer un archivo en ../data/test.csv usando una ruta relativa, pero al ejecutar main.py, surge un error que indica que no se encuentra el archivo. Esta aparente inconsistencia surge del hecho de que la ruta relativa se resuelve de manera diferente dependiendo de dónde se ejecuta el script.

En el caso de __init__.py y module.py, la ruta se evalúa en relación con el directorio que contiene estos archivos. Sin embargo, para main.py, la ruta es relativa a su propia ubicación.

Resolver la ambigüedad de la ruta

Para resolver esta ambigüedad, se pueden usar rutas absolutas. Alternativamente, un enfoque más elegante es utilizar el atributo __file__ de Python:

from pathlib import Path

path = Path(__file__).parent / "../data/test.csv"

with path.open() as f:
    test = list(csv.reader(f))

Este truco se basa en el módulo pathlib 3.4 de Python y construye una ruta absoluta basada en la ubicación del script actual.

Compatibilidad con versiones anteriores de Python

Si las versiones de Python inferiores a 3.4 todavía están en uso, un método alternativo implica manipular la ruta actual:

import csv
import os.path

my_path = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(my_path, "../data/test.csv")

with open(path) as f:
    test = list(csv.reader(f))

Este enfoque combina funciones os.path para lograr el mismo resultado que el método basado en pathlib.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3