Ruta y Directorio del archivo actual
Utilizando la variable global __file__
podemos averiguar para cada archivo tanto el nombre del archivo en cuestion como el directorio en el que se encuentra (y su directorio padre)
Para ello el modulo os
nos ofrece el método path
con una serie de métodos muy útiles para este objetivo:
-
join()
→ Junta trozos de rutas para generar una ruta final de manera inteligente -
dirname()
→ Devuelve el directorio del path dadoos.path.dirname('/Users/juanma/PROJECTS/PYTHON/demos/test.py')
→/Users/juanma/PROJECTS/PYTHON/demos
-
abspath()
→ Devuelve la ruta absoluta y normalizada del path dadoos.path.abspath(__file__)
→/Users/juanma/PROJECTS/PYTHON/demos/test.py
-
realpath()
→ Devuelve la ruta canonica del archivo dadoos.path.realpath(__file__)
→/Users/juanma/PROJECTS/PYTHON/demos/test.py
¿Qué diferencia hay entre abspath
y realpath
si parece que producen el mismo resultado? No mucha, pero aquí teneis una respuesta
Así, este ejemplo
import os
FILE = __file__
REALPATH = os.path.realpath(__file__)
ABSPATH = os.path.abspath(__file__)
DIRNAME = os.path.dirname(os.path.realpath(__file__))
print("{} \t\t\t\t\t\t ← __file__".format(FILE))
print("{} \t ← os.path.realpath(__file__)".format(REALPATH))
print("{} \t ← os.path.abspath(__file__)".format(ABSPATH))
print("{} \t\t ← os.path.dirname(os.path.realpath(__file__))".format(DIRNAME))
Nos devolverá algo asi…
test.py ← __file__
/Users/juanma/PROJECTS/PYTHON/demos/test.py ← os.path.realpath(__file__)
/Users/juanma/PROJECTS/PYTHON/demos/test.py ← os.path.abspath(__file__)
/Users/juanma/PROJECTS/PYTHON/demos ← os.path.dirname(os.path.realpath(__file__))