Manejo de rutas absolutas y relativas en Python

El módulo pathlib proporciona métodos para comprobar si una ruta dada es una ruta absoluta y devolver la ruta absoluta de una ruta relativa.

La llamada al método is_absolute() sobre un objeto Path devolverá True si representa una ruta absoluta o False si representa una ruta relativa. Por ejemplo, introduzca lo siguiente en el intérprete de comandos interactivo, utilizando sus propios archivos y carpetas en lugar de los que aparecen exactamente aquí:

>>> from pathlib import Path
>>> Path.cwd()
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37')
>>> Path.cwd().is_absolute()
True
>>> Path('spam/bacon/eggs').is_absolute()
False

Para obtener una ruta absoluta a partir de una ruta relativa, puedes poner Path.cwd() / delante del objeto Path relativo. Después de todo, cuando decimos «ruta relativa«, casi siempre nos referimos a una ruta que es relativa al directorio de trabajo actual. Introduzca lo siguiente en el shell interactivo:

>>> Path('my/relative/path')
WindowsPath('my/relative/path')
>>> Path.cwd() / Path('my/relative/path')
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python37/my/relative/
path')

Si su ruta relativa es relativa a otra ruta además del directorio de trabajo actual, simplemente sustituya Path.cwd() por esa otra ruta. El siguiente ejemplo obtiene una ruta absoluta utilizando el directorio personal en lugar del directorio de trabajo actual:

>>> Path('my/relative/path')
WindowsPath('my/relative/path')
>>> Path.home() / Path('my/relative/path')
WindowsPath('C:/Users/Al/my/relative/path')

El módulo os.path también tiene algunas funciones útiles relacionadas con las rutas absolutas y relativas:

  • Llamar a os.path.abspath(path) devolverá una cadena de la ruta absoluta del argumento. Esta es una forma fácil de convertir una ruta relativa en una absoluta.
  • Llamar a os.path.isabs(path) devolverá True si el argumento es una ruta absoluta y False si es una ruta relativa.
  • Llamar a os.path.relpath(path, start) devolverá una cadena de una ruta relativa desde la ruta de inicio hasta la ruta. Si no se proporciona start, se utilizará el directorio de trabajo actual como ruta de inicio.

Pruebe estas funciones en el shell interactivo:

>>> import os
>>> os.path.abspath('.')

'C:\\Users\\Al\\AppData\\Local\\Programs\\Python\\Python37'
>>> os.path.abspath('.\\Scripts')
'C:\\Users\\Al\\AppData\\Local\\Programs\\Python\\Python37\\Scripts'
>>> os.path.isabs('.')
False
>>> os.path.isabs(os.path.abspath('.'))
True

Dado que C:\Users\Al\AppData\Local\Programs\Python\Python37 era el directorio de trabajo cuando se llamó a os.path.abspath(), la carpeta de «un solo punto» representa la ruta absoluta ‘C:\\Users\\Al\\AppData\\Local\\Programs\\Python\\Python37’.

Introduzca las siguientes llamadas a os.path.relpath() en el shell interactivo:

>>> os.path.relpath('C:\\Windows', 'C:\\')
'Windows'
>>> os.path.relpath('C:\\Windows', 'C:\\spam\\eggs')
'..\\..\\Windows'

Cuando la ruta relativa se encuentra dentro de la misma carpeta padre de la ruta, pero está dentro de subcarpetas de una ruta diferente, como ‘C:\\Windows‘ y ‘C:\\spam\\eggs’, puede utilizar la notación ‘..‘ para volver a la carpeta padre.

Deja una respuesta