En Tue, 05 May 2009 12:55:13 -0300, spillz <[email protected]>
escribió:
/my/path/to/usbkey/and/file
everything up to "/my/path/to/usbkey" is case sensitive. only the "and/
file" is case insensitive. but my list of stored paths might include
all images under "/my". thus
/my/path/to/usbkey/and/file1==/my/path/to/usbkey/and/FILE1
/my/path/to/usbkey/and/file1==/my/path/to/usbkey/AND/FILE1
but
/my/path/to/usbkey/and/file1!=/my/path/TO/usbkey/AND/FILE1
so to do this right I'd need to establish which parts of the path are
case insensitive. being able to retrieve the actual path from an
equivalent representation would be so much simpler.
I use this function on Windows to obtain the true case name of a file:
<code>
from win32api import FindFiles
from win32file import FILE_ATTRIBUTE_DIRECTORY
from os.path import normpath, split, join
def truecase(fullpath, _cache={}):
"""
Normalize fullpath, returning names using the
same case as actually used in the filesystem.
"""
fullpath = normpath(fullpath)
dirname, filename = split(fullpath)
dirname = dirname.lower()
if not filename:
# drive letter
result = _cache[dirname] = dirname.upper()
return result
if dirname in _cache: dirname = _cache[dirname]
elif dirname: dirname = truecase(dirname)
finddata = FindFiles(fullpath)
if not finddata:
import errno, os
raise IOError(errno.ENOENT, os.strerror(errno.ENOENT), fullpath)
if len(finddata)!=1:
raise ValueError("Too many results for %r" % fullpath)
attr = finddata[0][0]
filename = finddata[0][8]
result = join(dirname, filename)
if attr & FILE_ATTRIBUTE_DIRECTORY:
_cache[result.lower()] = result
return result
</code>
truecase("c:")=="C:"
truecase("C:\\")=="C:\\"
truecase("c:\\")=="C:\\"
truecase("C:\\TeMp")=="C:\\TEMP"
truecase("C:\\TeMp\\")=="C:\\TEMP\\"
truecase(r"C:\Documents and Settings\gabriel")==r"C:\Documents and
Settings\gabriel"
truecase(r"c:\dOcUmEnTs aNd SeTtInGs\GaBrIeL\mIS DOCUMENTOS\105_3 - nist -
sPECIFICATIONS vOLUMETRIC fIELD sTANDARD.PDF")==r"C:\Documents and
Settings\gabriel\Mis documentos\105_3 - NIST - Specifications Volumetric
Field Standard.pdf"
truecase(r"E:\prog\test\compface\Debug\No existe.txt")
--
Gabriel Genellina
--
http://mail.python.org/mailman/listinfo/python-list