2015-08-25 37 views
1

在Windows中,os.path.basename('D:\\abc\def.txt')返回abc\def.txt,而os.path.basename('/abc/def.txt')返回def.txtos.path.basename是否適用於文件系統文件?

不應該第一次還要返回def.txt

+1

當'\ d'是一個轉義序列時不行。我想你簡化了你的問題; 'def'真的是以'd'還是以'r','t'或'n'開始? –

回答

2

您的文件名中有轉義碼,而不是\目錄分隔符。你一定是通過使用def的文件名簡化你的問題,但還你實際上與簡單的文件名測試你已經注意到了斜槓將增加一倍:

>>> 'D:\\abc\def.txt' 
'D:\\abc\\def.txt' 

注意,\d字符串文字中在值的Python表示中成爲\\轉義反斜槓。這是因爲沒有有效的\d轉義序列。在Windows系統中os.path.basename()調用將按預期該路徑:

>>> import os.path 
>>> os.path.basename('D:\\abc\\def.txt') 
'def.txt' 

在你的情況,但是,您創建了一個轉義序列,無論是\n\r\t,因爲你要麼忘了反斜槓或你加倍忘了使用原始字符串。你做不是在文件名的那部分有一個\字符,所以在那個位置沒有任何東西可以分割。

使用r'...'原始字符串,以防止單反斜線形成轉義序列,或在所有地點雙倍的反斜槓,或使用向前斜槓(視窗可以接受)。

+0

謝謝。這是我的測試中的一個錯字。應該是「D:\\ abc \\ def.txt」。 –

+0

確切地說,你沒有逃過反斜槓,這是我說的那個帽子。 –

相關問題