Python相对路径简化器

时间:2013-12-19 23:00:53

标签: python windows path

我遇到路径问题,点击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分钟的编码。

2 个答案:

答案 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'