Estamos trabajando con un depósito de código que se implementa tanto en Windows como en Linux, a veces en directorios diferentes. ¿Cómo debería uno de los módulos dentro del proyecto referirse a uno de los recursos que no son de Python en el proyecto (archivos CSV, etc.)?Cómo hacer referencia a rutas relativas de recursos cuando se trabaja con un depósito de código en Python
Si hacemos algo como:
thefile=open('test.csv')
o:
thefile=open('../somedirectory/test.csv')
que va a funcionar sólo cuando la secuencia de comandos se ejecuta desde un directorio específico, o un subconjunto de los directorios.
Lo que me gustaría hacer es algo como:
path=getBasePathOfProject()+'/somedirectory/test.csv'
thefile=open(path)
¿Es este el camino correcto? ¿Es posible?
Creo que esta solución sólo funciona si el recurso está en el mismo directorio del archivo de pitón, o en un subdirectorio de la misma. ¿Cómo resolverlo cuando se tiene la siguiente estructura de árbol: /Project_Root_dir /python_files_dir /Algunos más subdirectorios aquí py_file.py /recursos/ algunos subdirectorios aquí resource_file.csv – olamundo
Lo sentimos, obtuve el árbol de archivos ilegibles en ese último mensaje ... segundo intento: tiene su archivo en/Project_Root_dir/python_files_dir/some_subdirs/py_file.py y tiene su archivo de recursos en/Project_Root_dir/resources/some_subdirs/resource_file.csv – olamundo
Debe ser capaz de obtener al directorio padre usando join (foo, '..'). Entonces desde/root/python_files/module/myfile, use os.path.join (os.path.dirname ('__file__'), '..', '..', 'resources') – c089