Windows上Python的os.listdir行为


问题内容
>>> import os
>>> os.chdir('c:/python27')
>>> os.listdir('c:')
['Tools', 'include', 'python.exe', 'libs', 'DLLs', 'Lib', 'NEWS.txt',
'w9xpopen.exe', 'Doc', 'pythonw.exe', 'LICENSE.txt', 'README.txt', 'tcl']
>>> os.listdir('c:/')
['users', 'Program Files', 'Python27', 'windows']

为什么“ c:”后面的“ /”会影响结果?有没有办法os.listdir('c:')返回“ c:/”的内容?


问题答案:

这并非特定于Python,而是Windows的核心问题。

在WindowsC:和中C:\(或或者C:/)具有完全不同的含义:

  • C: 引用驱动器上的当前目录 C:
  • C:\(和C:/)是指驱动器的根目录C:

尽管类似UNIX的操作系统仅具有一个“当前目录”,但Windows具有两个独立的概念:

  • 当前驱动器和
  • 每个驱动器 的当前目录 __

因此,当前驱动器可以是D:,当前目录C:可以是\Windows(有效C:\Windows),当前目录D:可以是\Data(有效D:\Data)。在这种情况下,解析将像这样工作:

  • . 将指 D:\Data
  • \ 将指 D:\
  • C: 将指 C:\Windows
  • C:\Foo 将指 C:\Foo

因此,如果要获取有关 特定 目录的信息,则应始终使用 完整 路径, 包括 驱动器和目录,例如C:\