我在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.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'))
给出了{
使用其他驱动器时,不会出现这种意外行为。例如:
os.path.abspath(os.path.join('D:','Users','myuser'))
给出
'D:\\Users\\myuser'
这在我看来更合理
这是怎么回事?为什么'C:'
被视为'.\\'
'C:\\'
强制执行预期行为,它将被视为实际的字母驱动器。然而,在每一种其他情况下,'\\'
是可选的(例如,'.'
相当于'.\\'
,而'D:'
相当于'D:\\'
)李>cd
到C:
驱动器中的另一个目录,那么'C:'
将像'.'
一样引用该新目录。此外,如果您换到另一个驱动器(例如,D:
),那么'C:'
将按预期运行,新字母将采用这种行为(例如'D:'
现在相当于'.'
)李>
os.path.abspath
在Windows API中调用^{这只是Windows处理路径的方式,与Python无关
关于^{} 的文件也指出:
相关问题 更多 >
编程相关推荐