2010-07-23 13 views

Respuesta

132

os.path.isabs devuelve True si la ruta es absoluta, False si no es así. The documentation dice que funciona en Windows (puedo confirmar que funciona en Linux personalmente).

os.path.isabs(my_path) 
+1

Esta función no es multiplataforma. En Unix, 'os.path.isabs ('c: \\')' devuelve False. –

+49

Rotfl, y debería devolver False, ya que C: \\ no es una ruta absoluta en el sistema Unix. Las rutas absolutas en las plataformas Unix comienzan con "/", como "/ var/custApp /", etc. :) –

+16

@techtonik Para que quede perfectamente claro para cualquier otra persona que pueda encontrar esto: 'c: \\' es un archivo perfectamente válido/nombre de directorio en Unix. Entonces, realmente sería una ruta relativa en un sistema Unix. Por lo tanto, la función es multiplataforma. Porque, toma las especialidades de Windows y Unix en cuenta. – Lemming

1

El módulo os.path tendrá todo lo que necesita.

6
import os.path 

os.path.isabs('\home\user') 
True 

os.path.isabs('user') 
False 
+3

No creo que la barra invertida funcione, al menos no funciona en mi Linux Box. – Constantinius

29

Y si lo que realmente quiere es la ruta absoluta, no se molestan en comprobar para ver si lo es, acaba de obtener el abspath:

import os 

print os.path.abspath('.') 
+5

puede que no haya respondido la pregunta original, pero exactamente lo que estaba buscando sin darme cuenta. ¡Gracias! – mephisto

1

En realidad creo que ninguna de las anteriores las respuestas abordaron el problema real: las rutas multiplataforma. Lo que os.path hace es cargar la versión dependiente del sistema operativo de la biblioteca 'path'. por lo que la solución es cargar explícitamente la vía de la biblioteca correspondiente (OS):

import ntpath 
import posixpath 

ntpath.isabs("Z:/a/b/c../../H/I/J.txt") 
    True 
posixpath.isabs("Z:/a/b/c../../H/I/J.txt") 
    False 
1

otra manera si no está en el directorio de trabajo actual, un poco sucia, pero funciona para mí.

import re 
path = 'my/relative/path' 
# path = '..my/relative/path' 
# path = './my/relative/path' 

pattern = r'([a-zA-Z0-9]|[.])+/' 
is_ralative = bool(pattern) 
Cuestiones relacionadas