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