2013-05-13 224 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