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

时间:2017-11-18 09:39:41

标签: python os.path

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

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'

1 个答案:

答案 0 :(得分:2)

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

相关问题