2012-09-09 32 views
0

我想創建一個函數,將採取路徑列表(從參數列表中),執行os.path上的幾個函數(expandvars,expanduser,normpath),最後加入所有這些路徑值。到目前爲止,它看起來像這樣:創建函數來規範化路徑,然後加入

def normjoin(*p): 
    """ Uses os.path functions to normalize and join paths 
     *path - all the paths you want to join 
     return: normalized and joined string 
    """ 
    b_results = [] 
    for b in p: 
     b_results.append(os.path.normpath(os.path.expandvars(os.path.expanduser(b)))) 
    return os.path.join(b_results) 

,這是它的外觀在實踐中:

sharedir = normjoin("~", "Dropbox/SpideroakShared") 

我打算使用這兩個一個雙贏和Linux系統。

返回值看起來像這樣' "C:\\Users\\tgoldie", "Dropbox\\SpideroakShared"'這是不好的。

任何想法?

回答

3

函數的主體應該縮進。

您有b_results = "",但隨後嘗試append。這是行不通的。您需要b_results = []

最後,你需要傳遞的b_results作爲參數的項目os.path.join這樣的:

return os.path.join(*b_results) 
+0

修正了誤格式化我的消息(幸運的是沒有實際的代碼。)*在加入( )功能是訣竅。 *「分割」列表,還是隻是將參數發送到函數的方式?謝謝! – beeryardtech

+0

它接受一個列表的元素並將它們作爲參數發送給一個函數(換句話說,它使列表失效)。例如,'f(* [1,2,3])'與'f(1,2,3)'相同。 – asmeurer