我正在學習Python和我發現了一些奇怪我的劇本之一。做一個小的測試中,我發現了這個問題,從這一行爲朵朵:爲什麼os.path.join拋棄參數?
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
檢查documentation,這是,事實上,該功能的設計:
os.path中。 加入(PATH1[,PATH2[,... ]])
加入智能地一個或多個路徑的部件。如果任何組件是絕對路徑,則以前的所有組件(在Windows上,包括上一個驅動器盤符,如果有的話)都會被丟棄,並繼續加入。 ...
我的問題是不是why my script failed,而是爲什麼功能是這樣設計的。我的意思是,至少在Unix上,a//b
是指定路徑的完全可接受的方式,如果不是優雅的話。爲什麼用這種方式設計功能?有沒有什麼辦法可以判斷一個或多個路徑元素是否已被丟棄,而不是用os.path.isabs()
測試每個路徑字符串?
>>> os.path.join('a/','b')
'a/b'
按預期工作:
出於好奇,我也是在一個路徑組件在os.sep
字符結尾檢查的情況。如果你問一個用戶輸入一個文件名,其中爲os.path.join('a', '/b')
返回/b
它是有用的
一個容易的,雖然不雅的方法來檢查這是做'filename.lstrip('/')' – voithos
@voithos使它成爲'filename.lstrip(os.sep)',它可移植到大多數主要平臺。 – delnan
@delnan:你必須測試在Windows,它是'os.sep +「/」'.. –