如何使用Python检查路径是否是跨平台方式的绝对路径或相对路径?

pro*_*eek 127 python path

UNIX绝对路径以'/'开头,而Windows以字母'C:'或'\'开头.python是否有标准函数来检查路径是绝对路径还是相对路径?

Don*_*ner 189

os.path.isabsTrue如果路径是绝对路径则返回,否则返回False.文档说它适用于Windows(我可以确认它在Linux中可以正常工作).

os.path.isabs(my_path)
Run Code Online (Sandbox Code Playgroud)

  • Rotfl,它应该返回False,因为C:\\不是Unix系统中的绝对路径.unix平台上的绝对路径以"/"开头,如"/ var/custApp /"等.:) (67认同)
  • @techtonik为了让其他人可以清楚地看到它:`c:\\`是unix中完全有效的文件/目录名.所以,它确实是unix系统的相对路径.因此,该功能是跨平台的.因为,它需要考虑Windows和Unix的特性. (24认同)
  • 此功能不是跨平台的。在 Unix 上`os.path.isabs('c:\\')` 返回 False。 (2认同)
  • 确切地。它在不同平台上的行为不同,它为当前平台提供正确答案。 (2认同)

Way*_*ner 41

如果你真正想要的是绝对路径,不要费心检查它是否是,只需得到abspath:

import os

print os.path.abspath('.')
Run Code Online (Sandbox Code Playgroud)

  • 它可能没有回答原始问题,但确切地说我正在寻找而没有意识到它.谢谢! (5认同)

Pra*_*een 15

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:/')
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上在Windows上有效。`Path('\tmp').is_absolute()`正确给出了`False`,而`os.path.isabs('\tmp')`给出了错误的`True`。(有些人会认为“\tmp”在 Windows 上是绝对路径,但这仅适用于*绝对路径*的非常无用的定义。) (2认同)

Ale*_*sky 6

import os.path

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

os.path.isabs('user')
False
Run Code Online (Sandbox Code Playgroud)

  • 我不认为反斜杠会起作用,至少它不在我的linux盒子上. (3认同)

Sho*_*ham 5

实际上,我认为以上答案均未解决真正的问题:跨平台路径。os.path的作用是加载依赖于OS的“路径”库版本。因此解决方案是显式加载相关的(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
Run Code Online (Sandbox Code Playgroud)