首页 > 解决方案 > 为什么驱动器号的绝对路径等于工作目录?

问题描述

我在使用 pythonos.path模块时遇到了非常奇怪的行为。工作目录的驱动器号被视为工作目录本身的相对路径。例如:

使用os.path.abspath

os.path.abspath('.')印刷'C:\\Users\\myuser'

os.path.abspath('C:')也打印'C:\\Users\\myuser'

使用os.path.join

os.path.join('.','Users','myuser')给出了预期'.\\Users\\myuser'

'\\'在所有三个条目之间插入通知。然而:

os.path.join('C:','Users','myuser')'C:Users\\myuser'

请注意在and'\\'之间没有插入C:Users

os.path.abspath_os.path.join

尽管缺少'\\',python 接受'C:Users'并处理它,'.\\Users'如下所示:

'os.path.abspath(os.path.join('C:','Users','myuser'))'C:\\Users\\J34688\\Users\\myuser'

'os.path.abspath(os.path.join('.','Users','myuser'))这与给出相同 'C:\\Users\\J34688\\Users\\myuser'

使用不同的驱动器号

使用其他驱动器时不会出现这种意外行为。例如:

os.path.abspath(os.path.join('D:','Users','myuser'))'D:\\Users\\myuser'

在我看来,这似乎更合理。

结论

那么这里发生了什么?为什么被'C:'视为'.\\'

补充说明

标签: pythonpathrelative-path

解决方案


os.path.abspathWindows API 中的调用GetFullPathName。该文件指出

如果您指定“U:”,则返回的路径是“U:”驱动器上的当前目录

这就是 Windows 处理路径的方式,与 Python 无关。

的文档os.path.join还指出

请注意,由于每个驱动器都有一个当前目录,因此 os.path.join("c:", "foo") 表示相对于驱动器 C: (c:foo) 上的当前目录的路径,而不是 c:\foo .


推荐阅读