2015-10-08 26 views
0

Python新手,當我Frankensplice *一個路徑時,我拿起一個額外的反斜槓。不知道爲什麼。我知道它在原始狀態下打印爲'\'。這發生在Windows機器上。沒有尾部反斜槓的分割和重新加入路徑

*(拆分它,然後把它再聚首)

這裏就是我有

import os 

f = "C:\\Gwen\\Stefani\\This is bananas.txt" 

fname, ext = os.path.splitext(f) 
head, tail = os.path.split(fname) 

# strip last slash 
tail = tail.rstrip("\\") 

print ("%r" % (f)) # 'C:\\Gwen\\Stefani\\This is bananas.txt' 
print ("%r" % (head)) # 'C:\\Gwen\\Stefani' 
print ("%r" % (tail)) # 'This is bananas' 
print ("%r" % (ext)) # '.txt' 

# join them again 
r = os.path.join(head, tail, ext) 
print ("%r" % (r)) # 'C:\\Gwen\\Stefani\\This is bananas\\.txt' 
+0

您的預期輸出是什麼? – holroy

+0

@holroy我實際上正在調試的東西,有一個功能,改變大小寫的情況下,我沒有包括在這裏。至於結果?我希望最終與我開始,f == r。 –

回答

2

os.path.split拆分「路徑\文件」時,所有反斜槓都被刪除,因此不需要執行tail.rstrip("\\")

此外,加入他們的時候回去取相同的文字,你需要做到以下幾點:

r = os.path.join(head, tail, fname + ext) 

這是因爲os.path.join加入路徑元素,而不可能知道你突然推出了僅部分的文件名(.ext)。換句話說,在連接到完整的文件路徑之前,您需要連接文件名。 (這與您需要使用splitext來拆分文件名相反)

0
從文檔

os.path.join(path,*paths): 返回值是路徑的級聯和的任何成員*除了最後一個之外的每個非空白部分之後的一個目錄分隔符(os.sep)完全是的路徑,這意味着如果最後一部分爲空,結果將僅以分隔符結束。