web-dev-qa-db-de.com

Wie prüfe ich, ob ein Pfad ein absoluter Pfad oder ein relativer Pfad ist, und zwar plattformübergreifend mit Python?

Der absolute Pfad von UNIX beginnt mit '/', während Windows mit dem Alphabet 'C:' oder '\' ..__ beginnt. Hat Python eine Standardfunktion, um zu überprüfen, ob ein Pfad absolut oder relativ ist? 

110
prosseek

os.path.isabs gibt True zurück, wenn der Pfad absolut ist, False, falls nicht. Die Dokumentation sagt, dass es in Windows funktioniert (ich kann bestätigen, dass es in Linux persönlich funktioniert).

os.path.isabs(my_path)
159
Donald Miner

Und wenn das, was Sie wirklich wollen ist, der absolute Pfad ist, prüfen Sie nicht, ob dies der Fall ist, sondern holen Sie sich die abspath:

import os

print os.path.abspath('.')
33
Wayne Werner

Verwenden Sie os.path.isabs .

14
kennytm
import os.path

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

os.path.isabs('user')
False
6
Alex Bliskovsky

Ich glaube, keine der oben genannten Antworten hat das eigentliche Problem angesprochen: plattformübergreifende Wege. In os.path wird die vom Betriebssystem abhängige Version der "path" -Bibliothek geladen. Die Lösung besteht also darin, die entsprechende (OS-) Pfadbibliothek explizit zu laden:

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
3
Shoham

Das os.path-Modul enthält alles, was Sie brauchen.

1
Rob Lourens

eine andere Möglichkeit, wenn Sie sich nicht im aktuellen Arbeitsverzeichnis befinden, irgendwie schmutzig, aber es funktioniert für mich.

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

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