【发布时间】:2011-03-20 05:21:18
【问题描述】:
UNIX 绝对路径以“/”开头,而 Windows 以字母“C:”或“\”开头。 python是否有标准函数来检查路径是绝对路径还是相对路径?
【问题讨论】:
UNIX 绝对路径以“/”开头,而 Windows 以字母“C:”或“\”开头。 python是否有标准函数来检查路径是绝对路径还是相对路径?
【问题讨论】:
os.path.isabs 如果路径是绝对路径,则返回 True,否则返回 False。 The documentation 说它可以在 Windows 中运行(我可以确认它在 Linux 中运行)。
os.path.isabs(my_path)
【讨论】:
os.path.isabs('c:\\') 返回 False。
如果您真正想要的是绝对路径,请不要费心检查它是否是,只需获取abspath:
import os
print os.path.abspath('.')
【讨论】:
来自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 所做的是加载依赖于操作系统的“路径”库版本。所以解决方案是显式加载相关(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
【讨论】:
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 变量做任何事情