我遇到路径问题,点击Windows对路径中字符数的限制为256.
在我的python脚本的某个地方,有2条路径被追加,它们都是相对路径,而且这些路径变得非常长:
例如:
path1 = "..\\..\\..\\..\\..\\..\\..\\Source/lib/Target/abcd/abc_def_ghf/source/zzzModule/"
path2 = "../../../../../../../../Source/directory/Common/headerFile.h"
附加路径:
path3 = "..\\..\\..\\..\\..\\..\\..\\Source/lib/Target/abcd/abc_def_ghf/source/zzzModule/../../../../../../../../Source/directory/Common/headerFile.h"
我的Visual Studio解决方案中传递了path3
。此时VS停止并说未找到该文件。
这里的观察结果是,最终path3
上升了7级,然后下降了7级,然后又上升了8级。在python中是否有任何实用程序可以使用它并为我生成简化的相对路径?
e.g。
some_utility(path3) = "../../../../../../../../Source/directory/Common/headerFile.h"
我知道我自己可以写一个实用工具,但我只是在检查是否有。如果有一些,它将节省我20分钟的编码。
答案 0 :(得分:2)
使用os.path.normpath解析路径中的..
:
In [93]: os.path.normpath(os.path.join(path1,path2))
Out[93]: '../Source/directory/Common/headerFile.h'
答案 1 :(得分:1)
我会使用os.path.normpath
(+1 @unutbu),但只是为了好玩,这是一种手动方式:
def normpath(path3):
path = path3.split('/') # or use os.path.sep
answer = []
for p in path:
if p != '..':
answer.append(p)
else:
if all(a=='..' for a in answer):
answer.append(p)
else:
answer.pop()
return '/'.join(answer)
输出:
In [41]: normpath("../../../../../../../Source/lib/Target/abcd/abc_def_ghf/source/zzzModule/../../../../../../../../Source/directory/Common/headerFile.h")
Out[41]: '../../../../../../../../Source/directory/Common/headerFile.h'