如何使用Python跨平台检查路径是绝对路径还是相对路径?

如何使用Python跨平台检查路径是绝对路径还是相对路径?,python,path,Python,Path,UNIX绝对路径以“/”开头,而Windows以字母“C:”或“\”开头。 python是否有标准函数来检查路径是绝对的还是相对的?使用。os.path.isbs返回True如果路径是绝对的,返回False。说它在windows下工作(我可以亲自确认它在Linux下工作) 如果您真正想要的是绝对路径,那么不必费心检查它是否是绝对路径,只需获取abspath: import os print os.path.abspath('.') 事实上,我认为上述答案都没有解决真正的问题:跨平台路径。os

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

使用。

os.path.isbs
返回
True
如果路径是绝对的,返回
False
。说它在windows下工作(我可以亲自确认它在Linux下工作)

如果您真正想要的是绝对路径,那么不必费心检查它是否是绝对路径,只需获取
abspath

import os

print os.path.abspath('.')

事实上,我认为上述答案都没有解决真正的问题:跨平台路径。os.path所做的是加载依赖于操作系统的“path”库版本。因此,解决方案是显式加载相关(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

另一种方式,如果你不在当前的工作目录,有点脏,但它为我工作

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

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

可从
python3.4
获得

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:/')

此功能不跨平台。在Unix上,
os.path.isbs('c:\\')
返回False.Rotfl,它应该返回False,因为c:\\在Unix系统中不是绝对路径。unix平台上的绝对路径以“/”开头,如“/var/custApp/”等:)@techtonik,以便其他任何人都能清楚地看到:`c:\`是unix中完全有效的文件/目录名。因此,它在unix系统上实际上是一条相对路径。因此,该功能是跨平台的。因为,它考虑了Windows和Unix的特殊性。它在不同的平台上表现不一样,它给出了当前平台的正确答案。没有回答问题。要让跨平台规则使用“ntpath”或“posixpath”而不是“os.path”,我认为反斜杠不起作用,至少在我的linux机器上不起作用。它可能没有回答最初的问题,但正是我所寻找的,而我没有意识到。谢谢对这个问题特别提到了windows和linux路径!一个在几乎所有设置中都有效的快速单行程序:
def path\u is\u abs(p):return(len(p)>1)和(p[0]='/'或p[1]='=':')
这个答案实际上在Windows上有效。
path('\tmp')。is_absolute()
正确地给出了
False
,而
os.path.isbs('\tmp')
给出了错误的
True
。(有些人会争辩说,
\tmp
在Windows上是一个绝对路径,但这只适用于一个非常无用的绝对路径定义。)您的代码实际上不使用该模式进行任何操作,也不使用
path
变量进行任何操作
import re
path = 'my/relative/path'
# path = '..my/relative/path'
# path = './my/relative/path'

pattern = r'([a-zA-Z0-9]|[.])+/'
is_ralative = bool(pattern)
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:/')