Функции open () некорректно работают с filepath, содержащим специальные символы - PullRequest
0 голосов
/ 09 октября 2018

Я пишу этот простой код:

file = input('File to read: ')
fhand = open(file, 'r')

Файл, который я хочу открыть, называется 'test.txt' и находится в подпапке;поэтому я вставил в запрошенный ввод: 'DB \ test.txt'.

Хорошо: это не работает, возвращая это сообщение об ошибке:

OSError: [Errno 22]Invalid argument: 'DB\test.txt'.

У меня есть другой файлв той же директории, которая называется my_file.txt, и я не получаю ошибок при попытке ее открыть.Наконец, у меня есть еще один файл, который называется 'new_file.txt', и этот файл также вызывает у меня ту же ошибку.

Что мне кажется очевидным, так это то, что функция open () читает "\ t" и "\ n "как если бы они были специальными символами;выполняя поиск в Интернете, я не нашел ничего, что действительно могло бы помочь мне избежать специальных символов в строках ввода пользователя ... Кто-нибудь может помочь?

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

у вас не будет проблем с Python 3 с вашим точным кодом (эта проблема часто встречается при передаче строк literal , где требуется префикс r).

Сpython 2, сначала вам нужно будет заключить ваше имя в кавычки, затем будут интерпретированы все специальные символы (\t, \n ...).Если вы не введете r"DB\test.txt" с использованием этого исходного префикса, о котором я упоминал ранее, но он начинает становиться громоздким:)

Поэтому я бы предложил использовать raw_input (и не вводить текст с кавычками).Или версия с независимой версией Python для переопределения небезопасных input только для Python 2:

try:
    input = raw_input
except NameError:
    pass

, тогда ваш код будет работать нормально, и вы избавитесь от возможного внедрения кода в свой код в качестве бонуса (см. Python 2конкретная тема: Полезно ли когда-нибудь использовать ввод Python вместо raw_input? ).

...