Python 的 os.listdir 在 Windows 上的行为

12 投票
2 回答
29197 浏览
提问于 2025-04-17 00:56
>>> 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 个回答

4

C: 表示的是C盘上当前的工作目录。

C:/ 被转换成 C:\,它指的是C盘的根目录。

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

没有。

不过,你可以切换目录。但是这样可能会让用户感到困惑。

28

这其实不是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:\

撰写回答