Portable filename comparison

Peter Hansen peter at engcorp.com
Thu Jan 15 11:23:42 EST 2004


Ken Dyck wrote:
> 
> Is there a way with Python 2.2 to portably test the equivalence of two
> filenames?
> 
> The os.path.samefile function seems to do what I want, but it is only
> available on Unix and Mac. I need something that works on Windows.
> 
> The os.path.normcase and os.path.normpath functions are available on all
> platforms, but don't quite get me there. For example, on Windows
> 
> >>> os.path.normcase(os.path.normpath("C:\Program Files"))
> 'c:\\program files'
> >>> os.path.normcase(os.path.normpath("C:\PROGRA~1"))
> 'c:\\progra~1'
> 
> I suppose I could find a way to call into the Win32 API directly, but I'd
> prefer to use a portable solution if I can find one.

I believe you need to make your own, since the whole concept of thus
mungled long names on Windows is definitely not portable.

Here's a snippet that might make this seem much easier:

>>> def expand(shortname):
...    from win32api import GetLongPathName
...    return GetLongPathName(shortname)
...
>>> expand('c:\\progra~1')
'c:\\Program Files'

-Peter



More information about the Python-list mailing list