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之间不加斜杠?

最佳答案

为什么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是唯一在其中使用“绝对”概念的平台。)

10-06 09:21