行为" C:"使用ntpath模块

时间:2016-01-16 15:39:53

标签: python windows python-3.x

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
  1. 为什么C:不被视为绝对,但C:\是?
  2. 为什么ntpath.join()未在C:foo之间添加斜杠?

1 个答案:

答案 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是'绝对'是一个有用概念的唯一平台。)