2011-03-31 84 views
1

在Windows XP中,Python的2.6.6得到了意想不到的結果和os.path中:這個os.path用法有什麼問題?

a = "D:\temp\temp.txt" 
os.path.dirname(a) 
>>> 'D:' # Would expect 'D:\temp' 
os.path.normpath(a) 
>>> 'D:\temp\test.txt' 
os.path.basename(a) 
>>> '\temp\test.txt' #Would expect 'test.txt' 
a.replace("\\", "/") 
>>>'D:\temp\test.txt' # Would expect 'D:/temp/test.txt' 

有人能解釋這是怎麼回事?我如何獲得正確/預期的行爲?爲什麼我不能用正斜線替換反斜槓?

編輯:我從wxPython應用程序中的文本字段獲取此路徑,所以它作爲帶有未轉義的反斜槓的字符串出現,我似乎無法用「替換」替換它們。

回答

0

使用a.encode('string-escape')似乎優於其他解決方案,因爲我),可以在線完成和ii)它不添加額外的單/雙引號。

9

你並沒有逃避你的反斜槓。要麼使用\\代替\,或使用原始字符串,e.g:

a = r"D:\temp\temp.txt" 

在您的轉義字符串,則\t被解釋爲製表符。

+1

darn,打我吧。 – chucksmash 2011-03-31 17:02:09

+0

謝謝,有沒有辦法做到這一點,以便我可以做一些像os.path.isdir(r'a')? – Benjamin 2011-03-31 17:03:52

+0

如果您將os.path.dirname傳遞給File對象而不是字符串,則不必擔心轉義 - 只需轉義反斜槓或使用原始輸入,因爲您正在傳遞字符串。有什麼方法可以解決傳遞字符串的問題嗎? – chucksmash 2011-03-31 17:07:12

0

你的問題是與一個。你需要躲避字符串中的反斜槓試試這個:

a = "D:\\temp\\temp.txt"