2013-05-13 5 views
0

Использование Python 2.6 на Windows У меня есть функция, которая должна принимать имя пути в качестве аргумента. Я сталкиваюсь с проблемами при передаче определенных определенных путей.Настройка имен путей ввода пользователя

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 

То же самое для пути 'test', за исключением закладки вместо новой строки.

Единственное, что я до сих пор придумал, это проверить, есть ли \n или \t в названии пути, а затем обрабатывать его соответствующим образом, но, безусловно, должен быть лучший способ.

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

Что было бы лучше?

+0

Это не имеет никакого отношения к путям; это похоже на строковое цитирование в исходных файлах Python. –

ответ

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' 

, как вы можете видеть из этого примера пользовательский ввод действительно escaped

+0

По какой-то причине вход не автоматически выходит из косой черты, когда косая черта предшествует «t» или «n» - вероятнее всего будут случаи, когда это произойдет. Не уверен, что это проблема Windows или проблема с Python, но форсирование до необработанной строки сделало трюк, будет принято еще через 9 минут .... – Andenthal

+1

@ Антентально все обратные косые черты должны быть экранированы. Не только те, которые будут формировать «специальные» символы – cmd

+0

Я знаю, что они должны быть, но это не так: 'print os.path.getsize (" C: \ users \ bob \ test.png ")' возвращает: 'C : \\ users \\ bob \ test.png "Имя файла, имя каталога или синтаксис метки тома неверны". Почему первые два экранируются, а третий нет? – Andenthal

Смежные вопросы