Saltar al contenido

Leyendo el archivo usando la ruta relativa en el proyecto python

Posteriormente a mirar en diversos repositorios y sitios finalmente nos hemos encontrado la resolución que te enseñaremos más adelante.

Solución:

Las rutas relativas son relativas al directorio de trabajo actual. Si no quieres que sea tu camino, debe ser absoluto.

Pero hay un truco que se usa a menudo para crear una ruta absoluta a partir del script actual: use su __file__ especial attribute:

from pathlib import Path

path = Path(__file__).parent / "../data/test.csv"
with path.open() as f:
    test = list(csv.reader(f))

Esto requiere python 3.4+ (para el módulo pathlib).

Si aún necesita admitir versiones anteriores, puede obtener el mismo resultado con:

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))

[2020 edit: python3.4+ should now be the norm, so I moved the pathlib version inspired by jpyams’ comment first]

Para Pitón 3.4+:

import csv
from pathlib import Path

base_path = Path(__file__).parent
file_path = (base_path / "../data/test.csv").resolve()

with open(file_path) as f:
    test = [line for line in csv.reader(f)]

Mi versión de Python es Pitón 3.5.2 y la solución propuesta en la respuesta aceptada no me funcionó. Todavía me dieron un error

FileNotFoundError: [Errno 2] No such file or directory

cuando estaba corriendo my_script.py de la terminal Aunque funcionó bien cuando lo ejecuté a través de Run/Debug Configurations de PyCharm IDE (PyCharm 2018.3.2 (Community Edition)).

Solución:

En lugar de usar:

my_path = os.path.abspath(os.path.dirname(__file__)) + some_rel_dir_path 

como se sugiere en la respuesta aceptada, utilicé:

my_path = os.path.abspath(os.path.dirname(os.path.abspath(__file__))) + some_rel_dir_path

Explicación: Cambiando os.path.dirname(__file__) a os.path.dirname(os.path.abspath(__file__))
resuelve el siguiente problema:

Cuando ejecutamos nuestro script así: python3 my_script.py
la __file__ la variable tiene solo un string valor de “my_script.py” sin la ruta que conduce a ese script en particular. Por eso método dirname(__file__) devuelve un vacío string “”. Esa es también la razón por la cual my_path = os.path.abspath(os.path.dirname(__file__)) + some_rel_dir_path en realidad es lo mismo que my_path = some_rel_dir_path. Como consecuencia FileNotFoundError: [Errno 2] No such file or directory se da al intentar usar open porque no hay un directorio como “some_rel_dir_path”.

Ejecutar script desde PyCharm IDE Running/Debug Configurations funcionó porque ejecuta un comando python3 /full/path/to/my_script.py (donde especificamos “/full/path/to” en la variable “Directorio de trabajo” en Configuraciones de ejecución/depuración) en lugar de simplementepython3 my_script.py como se hace cuando lo ejecutamos desde la terminal.

Espero que sea útil.

Te mostramos las reseñas y valoraciones de los usuarios

Si haces scroll puedes encontrar las observaciones de otros administradores, tú además tienes la opción de insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *