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


142

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

Answers:


207

os.path.isabsTrue如果路径是绝对的,False则返回,否则返回。该文档说它可以在Windows中运行(我可以确认它可以在Linux中正常运行)。

os.path.isabs(my_path)

1
此功能不是跨平台的。在Unix上os.path.isabs('c:\\')返回False。
anatoly techtonik 2012年

69
Rotfl,它应该返回False,因为C:\\在Unix系统中不是绝对路径。Unix平台上的绝对路径以“ /”开头,例如“ / var / custApp /”等:)
Marek Lewandowski

29
@techtonik为了使所有人都清楚明白这一点:`c:\`是unix中一个完全有效的文件/目录名称。因此,这实际上是在UNIX系统上的相对路径。因此,该功能是跨平台的。因为,它考虑了Windows和Unix的特殊性。
Lemming

1
究竟。它在不同平台上的行为不同,它为当前平台提供了正确的答案。
凯文·考克斯

没有回答这个问题。要使用跨平台规则,请使用“ ntpath”或“ posixpath”而不是“ os.path”
Shoham

43

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

import os

print os.path.abspath('.')

7
它可能没有回答原始问题,但恰恰是我一直在寻找的未意识到的问题。谢谢!
mephisto



5

实际上,我认为以上答案均未解决真正的问题:跨平台路径。os.path的作用是加载OS依赖的'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

是! 这个问题专门提到了Windows和Linux路径!快速的def path_is_abs(p): return (len(p) > 1) and (p[0] == '/' or p[1] == ':')
单线

4

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

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

0

换句话说,如果您不在当前工作目录中,那有点脏,但是对我有用。

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

pattern = r'([a-zA-Z0-9]|[.])+/'
is_ralative = bool(pattern)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.