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.