Очистка имен путей ввода пользователя

Используя 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

То же самое для «тестового» пути, за исключением табуляции вместо новой строки.

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

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

Что может быть лучше?


person Andenthal    schedule 13.05.2013    source источник
comment
Это не имеет ничего общего с путями; похоже, речь идет о цитировании строк в исходных файлах Python.   -  person Clément    schedule 12.12.2015


Ответы (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'

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

person Joran Beasley    schedule 13.05.2013
comment
По какой-то причине ввод не экранирует косую черту автоматически, когда косая черта предшествует «t» или «n» — вероятно, это произойдет и в других случаях. Не уверен, что это проблема Windows или проблема Python, но принудительное использование необработанной строки помогло, будет принято еще через 9 минут.... - person Andenthal; 14.05.2013
comment
@Andenthal все обратные косые черты должны быть экранированы. Не только те, которые будут образовывать специальные символы - person cmd; 14.05.2013
comment
Я знаю, что они должны быть, но это не так: print os.path.getsize("C:\users\bob\test.png") возвращает: C:\\users\\bob\test.png "The filename, directory name, or volume label syntax is incorrect" Почему первые два экранированы, а третий нет? - person Andenthal; 14.05.2013
comment
как вы получаете пользовательский ввод? - person Joran Beasley; 14.05.2013
comment
Он поступает из другого модуля, который получает его из файла xml. - person Andenthal; 14.05.2013