【问题标题】:How to get full windows path in python如何在python中获取完整的windows路径
【发布时间】:2015-01-28 14:55:58
【问题描述】:

如何在 python 中将缩短的路径转换为完整路径?例如取这个完整路径

C:\Test\PathToMyDirectoryWithLongName\test.txt

变成了

C:\Test\PATHTO~\test.txt

如何将其转换回来?

【问题讨论】:

  • 它是如何“转化”的?
  • 它通过了一个黑盒 :-) 不知道它是如何转化的。应该没关系。
  • 好吧,我唯一的想法是,如果它在另一个系统上被缩短并且您正在从存储的数据中读取它,那么您可能难以获得长路径,因为它的缩短方式取决于系统它被缩短了。
  • 我明白了。不,这一切都发生在同一个系统上。

标签: python windows path


【解决方案1】:

使用win32api.GetLongPathName

>>> win32api.GetLongPathName(r'c:\progra~1')
'c:\\Program Files'

win32api.GetShortPathName:

>>> win32api.GetShortPathName(r'c:\Program Files')
'c:\\PROGRA~1'

注意:您需要安装pywin32 才能使用上述功能。

【讨论】:

  • GetLongPathName 看起来不错,但如果我尝试在像win32api.GetLongPathName(r'C:\tmp\test.txt') 这样的未缩短路径上使用它会引发异常实际上我真的不知道我的路径是否缩短了。有什么简单的解决方法吗?还是我必须捕获异常?
  • @arminb,如何检查路径是否包含~path = win32api.GetLongPathName(path) if '~' in path else path
  • 好的,看起来路径必须存在,否则我会收到错误消息。如果它存在并且没有缩短它也可以工作。
  • @arminb,如果它可以使用可逆算法将 255 个字符减少到 8.3 个短名称,那将是一个奇迹。相反,GetLongPathName 必须读取存储在文件系统中的现有文件的长文件名。它循环遍历路径元素,调用FindFirstFile 并从生成的WIN32_FIND_DATA 结构中加入cFileName 元素。
  • @falsetru,来自GetLongPathName docs:[D] 如果路径不包含波浪号 (~) 字符,则不要假设您可以跳过调用 GetLongPathName
猜你喜欢
  • 1970-01-01
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
相关资源
最近更新 更多