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
,您会发现这是一个无效的卷语法(在一条毫无帮助的消息中),即使资源管理器中的相同说明符会生成一个卷列表。
我在使用网络地址时遇到问题。在 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
,您会发现这是一个无效的卷语法(在一条毫无帮助的消息中),即使资源管理器中的相同说明符会生成一个卷列表。