2012-08-08 67 views
1

在閱讀os.path.join()方法的聯機文檔之後,以下情況似乎應該限定,但顯然不適用。我是否正確閱讀該文檔?從Python的os.path.join改正結果()

>>> import os 
>>> 
>>> os.path.join("/home/user", "/projects/pyproject", "mycode.py") 
>>> '/projects/pyproject/mycode.py' 

試圖尾隨和領導os.sep在第一和第二路徑的不同組合後,似乎第二個路徑的加入不能有它的第一個字符開始的os.sep。

>>> os.path.join("/home/user", "projects/pyproject", "mycode.py") 
>>> '/home/user/projects/pyproject/mycode.py' 

在PATH1和PATH2是從,比如說份的情況下,用戶輸入裝置編寫代碼來解析其輸入爲該主導os.sep。

從python.org在線參考:

os.path.join(path1[, path2[, ...]])加入一個或多個路徑組件 智能化。如果任何組件是絕對路徑,則所有先前的 組件(在Windows上,包括上一個驅動器盤符,如果存在 是其中的一個)將被丟棄,並繼續加入。返回值是 的連接點path1,以及可選的path2等,其中 一個目錄分隔符(os.sep)後面的每個非空部分除了最後一個 。 (這意味着空的最後部分將導致以分隔符結尾的路徑 )。請注意,在Windows上,由於每個驅動器都有一個 當前目錄,因此os.path.join("c:", "foo")代表 相對於驅動器上當前目錄的路徑C:c:foo),而不是 c:\foo

回答

7

我正確地閱讀該文檔嗎?

嘗試再次讀它,重點煤礦:

加入一個或多個路徑組件智能化。 如果任何組件是一個 絕對路徑,所有前面的組件,(在Windows上,包括前面 驅動器盤符,如果有一個)都扔掉,並 加盟繼續。返回值是path1, 和可選的path2等的連接,在除了最後一個以外的每個非空部分之後,只有一個目錄分隔符 (os.sep)。 (這意味着 空的最後部分將導致以 分隔符結尾的路徑。)請注意,在Windows上,由於每個驅動器都有當前目錄 ,因此os.path.join(「c:」,「」 foo「)代表相對於驅動器C上的當前目錄 的路徑:(c:foo),而不是c:\ foo。

當它說前面的組件被「扔掉」意味着它們被忽略並且不包括在最終結果中。

+0

我明白了,謝謝。我認爲以前的「組件」被拋出將是os.sep而不是整個路徑。 – 2012-08-08 22:08:26

2

正如文檔所述:如果任何組件是絕對的,則以前的組件將被丟棄。如果你的路徑以/開頭,那麼它是絕對的。如果它不是絕對的,它不應該以/開頭。