Pythons os.listdir adfærd på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



>>> 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']


Hvorfor påvirker '/' efter 'c:' resultatet? Er der en måde at få os.listdir('c:') til at returnere indholdet af 'c:/'?

Bedste reference


Jeg tror ikke, at dette er specifikt for Python, det er et Windows-spørgsmål på hjerte.


I Windows C: og C: (eller alternativt C:/ har helt forskellige betydninger:



  • C: henviser til den aktuelle mappe på drevet C:

  • C: (og C:/) henviser til rodkatalogen for drevet C:



Mens UNIX-lignende operativsystemer simpelthen har en 'aktuel mappe', har Windows to separate forestillinger:



  • det aktuelle drev og

  • den nuværende mappe pr. drev



Så det aktuelle drev kunne være D:, den aktuelle mappe på C: kunne være Windows (effektivt C:Windows) og den nuværende mappe på D: kunne være Data (effektivt D:Data). I dette scenario ville opløsningen fungere som dette:



  • . henviser til D:Data

  • henviser til D:

  • C: henviser til C:Windows

  • C:Foo henviser til C:Foo



Så hvis du vil have oplysninger om et bestemt -katalog, skal du altid bruge en fuld sti herunder både et drev og en mappe, f.eks. C:.

Andre referencer 1


C: bruger den aktuelle arbejdsmappe på C: drevet.


C:/er oversat til C: \ og bruger rodmappen på C: drevet.



  Er der en måde at få os.listdir ('c:') til at returnere indholdet af 'c:/'?



Ingen.


Du kan dog ændre mapper. Men det kan være forvirrende for brugerne.