сравнить два пути Windows, один из которых содержит тильду, в Python - PullRequest
6 голосов
/ 29 апреля 2010

Я пытаюсь использовать переменную окружения TMP в программе. Когда я прошу

tmp = os.path.expandvars("$TMP")

Я получаю

C:\Users\STEVE~1.COO\AppData\Local\Temp

Который содержит форму старой школы, тильды. Функция, которую я не контролирую, возвращает пути типа

C:\Users\steve.cooper\AppData\Local\Temp\file.txt

Моя проблема в этом; Я хотел бы проверить, находится ли файл на моем временном диске, но я не могу найти способ сравнить их. Как вы скажете, если эти две директории Windows;

C:\Users\STEVE~1.COO\AppData\Local\Temp
C:\Users\steve.cooper\AppData\Local\Temp

одинаковы?

Ответы [ 2 ]

8 голосов
/ 14 октября 2010

Вот альтернативное решение с использованием только ctypes из стандартной библиотеки Python.

tmp = unicode(os.path.expandvars("$TMP"))

import ctypes
GetLongPathName = ctypes.windll.kernel32.GetLongPathNameW
buffer = ctypes.create_unicode_buffer(GetLongPathName(tmp, 0, 0))
GetLongPathName(tmp, buffer, len(buffer))
print buffer.value
4 голосов
/ 29 апреля 2010

Вам потребуются расширения Python Win32 от http://sourceforge.net/projects/pywin32/, или я использую Python, упакованный ActiveState

Они включают функцию win32file.GetLongPathName, которая преобразует версию 8.3 в полный путь.

...