为什么驱动器号的绝对路径等于工作目录?

2024-05-23 19:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python的os.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'

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

使用os.path.abspathos.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'))给出了{}

使用不同的驱动器号

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

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

这在我看来更合理

结论

这是怎么回事?为什么'C:'被视为'.\\'

附加说明

  • 我找到了一个解决方法,通过使用'C:\\'强制执行预期行为,它将被视为实际的字母驱动器。然而,在每一种其他情况下,'\\'是可选的(例如,'.'相当于'.\\',而'D:'相当于'D:\\'
  • 无论您当前的工作目录是什么,此“功能”都有效。如果您cdC:驱动器中的另一个目录,那么'C:'将像'.'一样引用该新目录。此外,如果您换到另一个驱动器(例如,D:),那么'C:'将按预期运行,新字母将采用这种行为(例如'D:'现在相当于'.'

Tags: 模块path方法目录os字母条目users
1条回答
网友
1楼 · 发布于 2024-05-23 19:23:41

os.path.abspath在Windows API中调用^{}。该文件规定:

If you specify "U:" the path returned is the current directory on the "U:" drive

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

关于^{}的文件也指出:

Note that since there is a current directory for each drive, os.path.join("c:", "foo") represents a path relative to the current directory on drive C: (c:foo), not c:\foo.

相关问题 更多 >