Абсолютный путь UNIX начинается с '/', тогда как Windows начинается с алфавита 'C:' или '\'. Есть ли у python стандартная функция для проверки абсолютного или относительного пути?
147
os.path.isabs
возвращается, True
если путь абсолютный, False
если нет. В документации говорится, что он работает в Windows (я лично могу подтвердить, что он работает в Linux).
os.path.isabs(my_path)
os.path.isabs('c:\\')
возвращает False.И если вам действительно нужен абсолютный путь, не пытайтесь проверить, есть ли он, просто получите
abspath
:import os print os.path.abspath('.')
источник
Используйте
os.path.isabs
.источник
Из
python 3.4
pathlib доступен.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()
дает правильноFalse
, аos.path.isabs('\tmp')
дает неправильноTrue
. (Некоторые утверждают, что\tmp
это абсолютный путь в Windows, но это верно только для очень бесполезного определения абсолютного пути .)import os.path os.path.isabs('/home/user') True os.path.isabs('user') False
источник
На самом деле я думаю, что ни один из приведенных выше ответов не касался реальной проблемы: кроссплатформенных путей. Что делает os.path, так это загружает зависимую от ОС версию библиотеки path. поэтому решение состоит в том, чтобы явно загрузить соответствующую библиотеку путей (ОС):
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] == ':')
другой способ, если вы не в текущем рабочем каталоге, немного грязный, но он работает для меня.
import re path = 'my/relative/path' # path = '..my/relative/path' # path = './my/relative/path' pattern = r'([a-zA-Z0-9]|[.])+/' is_ralative = bool(pattern)
источник
path
переменной