Поведение Python os.listdir в Windows - PullRequest
       26

Поведение Python os.listdir в Windows

9 голосов
/ 31 августа 2011
>>> 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 ]

22 голосов
/ 31 августа 2011

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

4 голосов
/ 31 августа 2011

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

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

Есть ли способ получить os.listdir ('c:') для возврата содержимого "c: /"?

номер

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...