2015-08-23 42 views
0

在Python3.4(也2.6),使用os.path.relpath CMD,我得到不同的答案,如果我跑:
os.path.relpath("~/foo/bar.txt", "~")
比我跑
os.path.relpath("~/foo/bar.txt", "/home/<username>/")
(這裏我用我的用戶名替換<username>,自然!)Python的relpath /家庭/ <username>主場迎戰〜

也就是說,如果我在我的主目錄是,在第一種情況下,我得到
foo/bar.txt
(如我所期望的),但在這些cond case我得到
~/foo/bar.txt
這不是我所期望的,因爲〜正好是/home/<username>。 (我在第二種情況下獲得了相同的結果,無論我在第二個參數中是否包含尾隨的'/')。

第二種情況給出了更奇怪的結果,如果我在主目錄的子目錄中運行此結果,說〜/數據/:
Data/~/foo/bar.txt
哪些除非我誤會是一個不存在的目錄。

我可以找出解決這個問題的辦法,但是爲什麼會這樣呢?我不認爲這是一個錯誤,因爲它已經存在很長時間了。

回答

2

~實際上並不總是您的主目錄 - 這只是您的shell的解釋。您可以在任何地方創建一個名爲~的目錄,就像您可以創建一個名爲orange的目錄一樣。由於~可能是一個普通的舊目錄名稱,Python正在以這種方式處理它。

如果你想要的Python解釋~爲是指主目錄,作爲外殼會做,你需要告訴Python中,你要通過你的目錄名relpath之前更換~與路徑使用os.path.expanduser主目錄。

+0

謝謝,這回答我的「更奇怪的結果」的問題;我猜這畢竟不是那麼奇怪。 –

+0

(堅果,試圖編輯它,但我太慢了。)但我真的想要從我的家庭目標得到一個相對路徑,而「〜」實際上給了我我期待的答案。那麼爲什麼它不給我一個相對於我的家庭目錄的路徑,如果我把它作爲第二個參數/ home/?爲什麼Python會粘在「〜」中?這似乎不是相對路徑。 (或者換句話說,我如何從我的主目錄中得到一個relpath到一個文件?) –

+0

@MikeMaxwell:如果Python看起來像一個'〜',那意味着你有一個'〜'投入。在傳遞給'relpath'之前在輸入上的'expandhome'應該替代你。另外,在'expandhome'之後和'relpath'之前通過'abspath'運行輸入可能會有所幫助。 – icktoofay

相關問題