2016-03-10 42 views
1

我在這裏加入我的路徑的方式有什麼問題?在tkinter filedialog的os.path.join結果中缺少斜槓

除了列表中的第一項外,其他項目都會正確加入。

我正在從tkinter中的一個filedialog中抓取一條路徑。

即filedialog.askdirectory()

示例路徑:

PATH = "C:/MyUserName/Desktop/SomeDir" 

我在做什麼:

os.path.join(*(PATH.split("/") + ["somefile.txt"])) 

這將打印出以下:

C:MyUserName/Desktop/SomeDir/somefile.txt 

爲什麼要它失去了第一個/

+0

無法重現。爲我工作在2.7 –

+0

無法重現。 –

+0

@Slayer你能提供更多的代碼嗎? –

回答

3

我需要轉換我的初始路徑使用os.normpath我得到了tkinter的filedialog輸入,然後試圖在問題中使用上述路徑樣式/代碼來訪問/創建文件。

由於窗口上的加入/分離器錯誤,導致錯誤。

2

您正在使用Windows,對吧?

從文檔:

在Windows中,遇到一個絕對路徑成分(例如,R「\富」)時的驅動器號不復位。如果某個組件包含驅動器號,則以前的所有組件都將被丟棄,並重置驅動器號。請注意,由於每個驅動器都有當前目錄,因此os.path.join(「c:」,「foo」)表示相對於驅動器C上當前目錄的路徑:(c:foo),而不是c:\ foo 。

這意味着c:foo實際上是一條正確的路徑。嘗試os.path.abspath('c:foo')os.path.abspath('c:\\foo')以查看差異。第一個路徑是c盤上的相對路徑,第二個路徑是絕對路徑。

2

Windows爲所有驅動器保留當前路徑。 C:MyUserName/Desktop/SomeDir/somefile.txtC:/MyUserName/Desktop/SomeDir/somefile.txt都是有效的,並且ntpath.join無法知道您是需要驅動器相對路徑還是驅動器絕對路徑。