2013-05-13 227 views
0

在Windows上使用Python 2.6我有一個函數需要接受路徑名作爲arg。當某些特定路徑通過時,我遇到了問題。消毒用戶輸入路徑名稱

C:\users\bob\something.png #this is handled no prob. 
C:\users\bob\nothing.png  #this generates a WindowsError 
C:\users\bob\test.png   #this also generates a WindowsError 

什麼我收集的是,在「一無所有」路徑\n被解釋爲一個新的生產線,並在「測試」路徑\t被解釋爲一個標籤。

如果我打印出路徑名稱,那就是正在發生的情況。

print os.path.abspath("C:\users\bob\nothing.png") 
C:\users\bob 
othing.png 

與「測試」路徑相同,除了選項卡而不是新行。

我到目前爲止唯一想做的是檢查\n\t是否在路徑名中,然後相應地處理它,但必須有更好的方法。

if '\n' in path_name: 
    #escape slash, move on 

更好的方法是什麼?

+0

這與路徑無關;它似乎是關於Python源文件中的字符串引用。 – 2015-12-11 22:49:43

回答

4
print os.path.abspath(r"C:\users\bob\nothing.png") 

可能是你找什麼?

雖然用戶輸入應自動逃避斜線...

>>> a = raw_input("Enter Path:") 
Enter Path:C:\www\a\nothing.jpg 
>>> a 
'C:\\www\\a\\nothing.jpg' 

你可以從這個例子看到用戶輸入的確逃脫

+0

出於某種原因,當斜槓在't'或'n'之前時,輸入不會自動轉義斜線 - 這可能會發生其他情況。不知道這是一個Windows問題還是一個Python問題,但是強制原始字符串的竅門,將在9分鐘內接受...... – Andenthal 2013-05-13 21:41:56

+1

@Andenthal所有反斜槓都應該逃脫。不僅僅是那些將形成「特殊」字符的人 – cmd 2013-05-13 21:49:00

+0

我知道他們應該是,但他們不是:'print os.path.getsize(「C:\ users \ bob \ test.png」)'returns:'C :\\ users \\ bob \ test.png「文件名稱,目錄名稱或卷標語法不正確」'爲什麼前兩個字符被轉義了,第三個不是? – Andenthal 2013-05-13 22:02:07