Python在Windows上的os.listdir行为

时间:2011-08-31 15:01:16

标签: python windows operating-system

>>> 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:/”的内容?

2 个答案:

答案 0 :(得分:22)

我认为这不是Python特有的,它是一个Windows问题。

在Windows中C: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:\

答案 1 :(得分:4)

C:使用C:驱动器上的当前工作目录。

C:/被转换为C:\并使用C:驱动器上的根目录。

  

有没有办法让os.listdir('c:')返回“c:/”的内容?

没有

但是,您可以更改目录。但这可能会让用户感到困惑。