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 yFalse
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 proporcionastart
, 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.