2017-05-08 48 views
1

所以,我製作了一個僞登錄系統,並且遇到了幾個與os.path.join相關的bug功能。Python os.path.join以(「any_path」,「c:」)作爲輸入的奇怪行爲

當輸入如「c:」或「d:」等輸入作爲用戶名時,它似乎很奇怪,因爲它會在根驅動器之前斷開任何路徑字符串。

所以,輸入如:

>>> import os 
>>> os.path.exists(os.path.join(some_path, "this_is", "voided", "c:", "python34")) 
True 

將擁有第一個3條語句完全忽略。

有什麼辦法可以避免這種情況?

回答

0

似乎是一個已知bug

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

您可以嘗試pathlib.PurePath.joinpath

+0

正是我一直在尋找,TY –

+0

@SynthestraRamicryth將其標記爲正確的可能? – Vatsal