Ścieżka bezwzględna UNIX zaczyna się od „/”, podczas gdy Windows zaczyna się od alfabetu „C:” lub „\”. Czy Python ma standardową funkcję sprawdzającą, czy ścieżka jest bezwzględna czy względna?
142
os.path.isabs
zwraca, True
jeśli ścieżka jest bezwzględna, False
jeśli nie. Dokumentacja mówi, że działa w systemie Windows (osobiście mogę potwierdzić, że działa w systemie Linux).
os.path.isabs(my_path)
os.path.isabs('c:\\')
zwraca False.A jeśli naprawdę chcesz ścieżkę absolutną, nie przejmuj się sprawdzaniem, czy tak jest, po prostu pobierz
abspath
:źródło
Użyj
os.path.isabs
.źródło
źródło
Właściwie myślę, że żadna z powyższych odpowiedzi nie dotyczyła prawdziwego problemu: ścieżek międzyplatformowych. To, co robi os.path, to załadowanie zależnej od systemu operacyjnego wersji biblioteki „path”. więc rozwiązaniem jest jawne załadowanie odpowiedniej biblioteki ścieżek (systemu operacyjnego):
źródło
def path_is_abs(p): return (len(p) > 1) and (p[0] == '/' or p[1] == ':')
Z
python 3.4
pathlib jest dostępne.źródło
Path('\tmp').is_absolute()
daje poprawnieFalse
, aos.path.isabs('\tmp')
podaje niepoprawnieTrue
. (Niektórzy twierdzą, że\tmp
jest to ścieżka absolutna w systemie Windows, ale dotyczy to tylko bardzo bezużytecznej definicji ścieżki absolutnej .)inny sposób, jeśli nie jesteś w bieżącym katalogu roboczym, trochę brudny, ale dla mnie działa.
źródło