2012-08-12 92 views
3

任何想法爲什麼在Python 2.6中不能正確加入2.6 Win?Python os.path.join對於網絡路徑無法正常工作

import os 

myPath = "\\\\192.168.1.50\\Shared" 
myPath2 = "\\Folder2" 
myFile = "1.txt" 

print os.path.join(myPath, myPath2, myFile) 

結果:

\Folder2\1.txt 

我期待的結果是 「\\ 192.168.1.50 \共享\文件夾2 \ 1.txt的」!

回答

1

加入是一個方便的功能,這是不是太聰明。例如,它不會驗證路徑的存在等。它只是遵循一些正式的規則。

至於你的問題,請刪除myPath2定義中的額外斜線。

import os 

myPath = "\\\\192.168.1.50\\Shared" 
myPath2 = "Folder2" 
myFile = "1.txt" 

print os.path.join(myPath, myPath2, myFile) 

\\192.168.1.50\Shared\Folder2\1.txt

您將有同樣的問題,與普通的路徑:

import os 

myPath = "C:\\Shared" 
myPath2 = "\\Folder2" 
myFile = "1.txt" 

print os.path.join(myPath, myPath2, myFile) 

\Folder2\1.txt

-1

也許它並不支持這一點,你可以使用它作爲正常:

print myPath + myPath2 + myFile 
+0

好吧,我知道了現在,文檔解釋了它: 如果任何組件是一個絕對路徑,所有以前的組件(在Windows上,包括前面的驅動器盤符,如果有的話)被扔掉,並繼續加入。 – Andriusa 2012-08-12 14:49:41

+0

-1你的方法對於OP的例子和無數其他現實世界的例子會產生一個**錯誤的**結果,而'os.path.join'幾乎總是正確的(儘管它有時與路徑上的天真觀點不一致)。不要那麼快就會因爲某人錯誤地使用它而放棄一個偉大的工具。 – delnan 2012-08-12 17:14:51

1

如果任何組件是一個絕對路徑,所有以前的組件(在Windows上,包括之前的驅動器盤符,如果有的話)將被丟棄,並繼續加入。

我需要從myPath2的開頭刪除斜槓,否則它將被作爲絕對路徑樹並且myPath將被忽略!

import os 

myPath = "\\\\192.168.1.50\\Shared" 
myPath2 = "Folder2" 
myFile = "1.txt" 

print os.path.join(myPath, myPath2, myFile) 

結果:

\\192.168.1.50\Shared\Folder2\1.txt