CPython 3.4.1
>>> import ntpath as p
>>> p.isabs('C:')
False
>>> p.isabs('C:\\')
True
>>> p.join('C:', 'foo')
'C:foo'
>>> p.join('C:\\', 'foo')
'C:\\foo'
>>>
我期待的是什么
>>> import ntpath as p
>>> p.isabs('C:')
True
>>> p.join('C:', 'foo')
'C:\\foo'
>>> # others the same
C:
不被视为绝对,但C:\
是?ntpath.join()
未在C:
和foo
之间添加斜杠?答案 0 :(得分:3)
为什么C:不被认为是绝对的
因为没有额外的斜杠,它意味着“C:驱动器的当前目录”(每个驱动器在DOS / Windows中都有自己的当前目录):
C:\> cd Windows
C:\WINDOWS\> python
Python 2.7.11. (default, ...)
>>> import os
>>> os.listdir('C:')
['0.log', 'addins', 'AppPatch', ...
(这是C:\ Windows目录的列表,而不是根C:\。)
为什么ntpath.join()不在C:和foo之间添加斜杠?
也许你想在C:驱动器的当前目录中找到文件foo
。
实际结果:仅仅因为路径不是'绝对',并不意味着它相对于实际的当前工作目录。同样,\
是绝对路径,但仍取决于当前的工作驱动。
(riscospath
更奇怪;一般来说,POSIX是'绝对'是一个有用概念的唯一平台。)