ОС Python.поведение listdir в Windows

>>> 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 ответов


я не думаю, что это специфично для 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:\.


C: использует текущий рабочий каталог на диске C:.

C: / переводится на C:\ и использует корневой каталог на диске C:.

есть ли способ получить ОС.listdir ('c:'), чтобы вернуть содержимое "c:/"?

нет.

вы можете, однако, изменить каталоги. Но это может сбить с толку пользователей.