在Python中比较包含波浪号的两个Windows路径

7 投票
2 回答
1950 浏览
提问于 2025-04-15 22:09

我正在尝试在一个程序中使用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

这里有一个替代方案,只使用了标准Python库中的ctypes

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
5

你需要从 http://sourceforge.net/projects/pywin32/ 下载 Python 的 win32 扩展,或者你也可以使用 ActiveState 提供的 Python 版本。

这些扩展里有一个叫 win32file.GetLongPathName 的功能,它可以把简短的 8.3 格式的路径转换成完整的路径。

撰写回答