Python 的 os.path.relpath 的意外行为

Unexpected behaviour of Python's os.path.relpath

我在使用网络地址时遇到问题。在 Python3.6 和 Windows 中尝试过。调用

os.path.relpath(r"\ZEYCUS\first\second\file.txt", start=r"\ZEYCUS\first")

我得到 'second\file.txt',如我所料。但是

os.path.relpath(r"\ZEYCUS\first\second\file.txt", start=r"\ZEYCUS")

我收到一条错误消息:ValueError: path is on mount '\\ZEYCUS\first', start on mount 'C:'

这是怎么回事? C: 位从何而来?我应该如何使用relpath获得'first\second\file.txt'

那是因为 r'\ZEYCUS' 实际上不是 OS 路径。它是一个网络主机说明符。 Windows使用盘符,继承自DOS,两者之间没有相对路径;相对路径仅在驱动器内起作用。 r"\ZEYCUS\first" 是一个网络卷,其操作类似于驱动器。实际上,整个部分变成了隐式驱动器号。 C: 很可能是您的系统驱动器,可能是 Python 进程的当前驱动器。如果您在 Cmd 中尝试 dir \zeycus,您会发现这是一个无效的卷语法(在一条毫无帮助的消息中),即使资源管理器中的相同说明符会生成一个卷列表。