Санитарная обработка имен пользователей
Использование 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
Что может быть лучше?
1 ответ
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'
как вы можете видеть из этого примера, пользовательский ввод действительно экранирован