Ruta y Directorio del archivo actual

2018-03-24

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 dado os.path.dirname('/Users/juanma/PROJECTS/PYTHON/demos/test.py')/Users/juanma/PROJECTS/PYTHON/demos

  • abspath() → Devuelve la ruta absoluta y normalizada del path dado os.path.abspath(__file__)/Users/juanma/PROJECTS/PYTHON/demos/test.py

  • realpath() → Devuelve la ruta canonica del archivo dado os.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__))