Это стандартная библиотека lib, которая преобразует все части пути (кроме буквы диска):
def casedpath(path):
r = glob.glob(re.sub(r'([^:/\\])(?=[/\\]|$)', r'[\1]', path))
return r and r[0] or path
И этот дополнительно обрабатывает UNC-пути:
def casedpath_unc(path):
unc, p = os.path.splitunc(path)
r = glob.glob(unc + re.sub(r'([^:/\\])(?=[/\\]|$)', r'[\1]', p))
return r and r[0] or path
Примечание. Это несколько медленнее, чем зависимый от файловой системы трюк Win API "GetShortPathName", но работает независимо от платформы и файловой системы, а также когда генерация короткого имени файла отключена на томах Windows (fsutil.exe 8dot3name query C:
) - рекомендуется по крайней мере для критичных к производительности файловых систем, когда 16-битные приложения больше не полагаются на это:
fsutil.exe behavior set disable8dot3 1