Санитарная обработка имен пользователей

Использование 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'

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

Другие вопросы по тегам