2013-12-19 47 views
0

我在運行python腳本時遇到了一個問題。問題是,因爲通路上的字符數的Windows的限制:256Python相對路徑簡化器

的問題如下:
在我的python腳本一些地方的2路越來越附加,他們都是相對的路徑。因此附加路徑變得長於256個字符。
例如:
path1 = .. \ .. \ .. \ .. \ .. \ .. \ .. \ Source \ lib/Target/abcd/abc_def_ghf/source/zzzModule/
path2 = ../../ ../../../../../../Source/directory/Common/headerFile.h


追加路徑:
path3時= .. \ .. \ .. \ .. \ .. \ .. \ .. \出處/ LIB /目標/ ABCD/abc_def_ghf /源極/ zzzModule /../../../../../../../../源/目錄/ Common/headerFile.h


而這個路徑(path3)在我的visual studio解決方案中傳遞。此時VS停止並且說沒有找到該文件。


我的問題: 這裏的觀察結果是,最終的路徑3先是7級,然後是7級,然後是8級。 python中是否有任何實用工具可以使用它併爲我生成一個簡化的相對路徑。

例如 some_utility(path3)= ../../../../../../../../Source/directory/Common/headerFile.h
P.S. :我知道我可以自己寫一個實用程序,但我只是檢查是否有任何。如果有一些它會節省我20分鐘的編碼。

+0

谷歌搜索* python path normalize *在第一個答案中鏈接 - http://docs.python.org/library/os.path.html –

+0

@PiotrDobrogost:我不知道它被稱爲路徑規範化。我搜索了「Python相對路徑優化」,但結果並沒有幫助。 – tejas

回答

2

使用os.path.normpath解決..路徑:

In [93]: os.path.normpath(os.path.join(path1,path2)) 
Out[93]: '../Source/directory/Common/headerFile.h' 
+0

工作。非常感謝。 – tejas

2

我會用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'