This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Windows os.path.isdir bad if drive only
Type: Stage:
Components: Extension Modules Versions: Python 2.2
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: Nosy List: cifuller, facundobatista, tim.peters
Priority: normal Keywords:

Created on 2002-02-11 22:50 by cifuller, last changed 2022-04-10 16:04 by admin. This issue is now closed.

Messages (6)
msg9229 - (view) Author: Charles I. Fuller (cifuller) Date: 2002-02-11 22:50
It seems that most os functions recognize the Windows 
drive letter without a directory as the current 
directory on the drive, but os.path.isdir still 
returns 0.  If os.listdir('C:') returns data, 
os.path.isdir('C:') should return 1 for consistency.

C:\folder_on_C>python
Python 2.2 (#28, Dec 21 2001, 12:21:22) [MSC 32 bit 
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for 
more information.
>>> import os
>>> os.system('dir C:')
 Volume in drive C has no label.
 Volume Serial Number is E4C9-AD16

 Directory of C:\folder_on_C

02/11/2002  05:29p      <DIR>          .
02/11/2002  05:29p      <DIR>          ..
02/11/2002  05:29p      <DIR>          subA
02/11/2002  05:29p      <DIR>          subB
               0 File(s)              0 bytes
               4 Dir(s)  22,126,567,424 bytes free
0
>>> os.listdir('C:')
['subA', 'subB']
>>> os.path.abspath('C:')
'C:\\folder_on_C'
>>> os.path.isdir('C:')
0
msg9230 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-02-11 23:16
Logged In: YES 
user_id=31435

Sorry, this is how Microsoft's implementation of the 
underlying stat() function works.  "Root drive" paths must 
be given with a trailing slash or backslash, else MS stat() 
claims they don't exist.  You'll see the same irritating 
behavior in C code.  Attempts to worm around it in the past 
have introduced other bugs; see bug 513572 for a current 
example.
msg9231 - (view) Author: Charles I. Fuller (cifuller) Date: 2002-02-12 21:54
Logged In: YES 
user_id=211047

Responding to Tim's followup...

In this case the 'C:' is not the root drive, it is the 
current dir on that drive.  I noticed that os.path.abspath 
was updated between 2.0 and 2.2 to recognize the current 
dir.

It's an inconsistency that tripped me up already.

>>> os.path.isdir('C:')
0
>>> os.path.isdir(os.path.abspath('C:'))
1

The listdir has been working with drive specs (recognizing 
the current dir) for a while.  The abspath code must be 
handling the drive-only input as a special case.  The isdir 
function should do the same for consistency.

There should at least be a warning in the docs...
msg9232 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2002-02-12 22:33
Logged In: YES 
user_id=31435

Well, the underlying Microsoft routines are themselves 
inconsistent, and in undocumented ways.  We make a mild 
effort to hide their warts, but it's historical truth that 
doing so introduces other bugs.  The sad fact is that MS 
stat() insists "C:" does not exist, but the MS 
FindFirstFile happily accepts "C:".  If you think *you* can 
straigten this inherited mess out, happy to accept a patch 
<wink>.
msg9233 - (view) Author: Facundo Batista (facundobatista) * (Python committer) Date: 2005-03-21 19:30
Logged In: YES 
user_id=752496

Please, could you verify if this problem persists in Python 2.3.4
or 2.4?

If yes, in which version? Can you provide a test case?

If the problem is solved, from which version?

Note that if you fail to answer in one month, I'll close this bug
as "Won't fix".

Thank you! 

.    Facundo
msg9234 - (view) Author: Facundo Batista (facundobatista) * (Python committer) Date: 2005-05-30 18:00
Logged In: YES 
user_id=752496

Deprecated. Reopen only if still happens in 2.3 or newer. 

.    Facundo
History
Date User Action Args
2022-04-10 16:04:59adminsetgithub: 36085
2002-02-11 22:50:44cifullercreate