6

我正在用 Python 为 Windows 编写一个命令行目录导航器,并且在 os.path.join 上有点挣扎。本质上,这就是我想要做的事情:

abspath = "C:\Python32\Projects\ls.py"
abspath = abspath.split('\\')
print(abspath) #this prints ['C:', 'Python32', 'Projects', 'ls.py']

if(options.mFlag):  
        print(os.path.join(*abspath)) #this prints C:Python32\Projects\ls.py
        m = time.ctime(os.path.getmtime(os.path.join(*abspath))) #this throws an exception

问题是 os.path.join 没有在“C:”之后插入“/”,我不知道为什么。有什么帮助吗?

编辑:如果将来有人来这里寻找解决方案,我只是在“C:”之后添加了 os.sep,而不是硬编码反斜杠,这很有效。

4

2 回答 2

6

文档中

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

很难说出您要完成的工作,因为您的所有代码似乎都针对的是拆分路径,然后将其按原样重新组合在一起,在这种情况下,为什么要首先拆分它? 但也许os.path.splitdrive会帮助你?它从路径中拆分驱动器号。

于 2012-11-19T19:39:29.240 回答
3

文档(http://docs.python.org/2/library/os.path.html)指定了这种行为:

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

于 2012-11-19T19:38:48.787 回答