Risposte:
os.path.isabs
ritorna True
se il percorso è assoluto, in False
caso contrario. La documentazione dice che funziona su Windows (posso confermare che funziona su Linux personalmente).
os.path.isabs(my_path)
E se quello che vuoi davvero è il percorso assoluto, non preoccuparti di controllare se lo è, basta ottenere abspath
:
import os
print os.path.abspath('.')
Usa os.path.isabs
.
import os.path
os.path.isabs('/home/user')
True
os.path.isabs('user')
False
In realtà penso che nessuna delle risposte di cui sopra abbia affrontato il vero problema: percorsi multipiattaforma. Ciò che os.path fa è caricare la versione dipendente dal sistema operativo della libreria 'path'. quindi la soluzione è caricare esplicitamente la libreria dei percorsi (OS) pertinente:
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
def path_is_abs(p): return (len(p) > 1) and (p[0] == '/' or p[1] == ':')
Da python 3.4
pathlib è disponibile.
In [1]: from pathlib import Path
In [2]: Path('..').is_absolute()
Out[2]: False
In [3]: Path('C:/').is_absolute()
Out[3]: True
In [4]: Path('..').resolve()
Out[4]: WindowsPath('C:/the/complete/path')
In [5]: Path('C:/').resolve()
Out[5]: WindowsPath('C:/')
Path('\tmp').is_absolute()
dà correttamente False
, mentre os.path.isabs('\tmp')
dà in modo errato True
. (Alcuni sosterrebbero che \tmp
è un percorso assoluto su Windows, ma questo è vero solo per una definizione molto inutile di un percorso assoluto .)
os.path.isabs('c:\\')
restituisce False.