вопрос по input и экранированию

212 просмотра
0
0 Комментариев

Всем привет! Есть скрипт Python, все работает, но есть одно неудобство: в коде есть пара мест, в которых пользователь должен вставить путь к файлу. и так как \ надо экранировать, то приходится писать \\, например C:\\papka\\file.txt что неудобно, хотелось бы чтобы пользователь мог просто скопировать и вставить C:\papka\file.txt Как этого добиться? код примерно такой:

perv = input ('Укажите путь к изменяемому файлу, \ замени на \\\: ')
vtor = input ('Куда сохранить измененный файл, \ замени на \\\: ')
inp = open (perv, 'r')
out = open (vtor, 'w')


Добавить комментарий

2 Answers

Python Опубликовано 16.12.2018
0

Можно использовать спецификатор r для строки, который обозначает — строка вводится в сыром формате(экранировать при этом ничего не надо). Одинаково хорошо подходит как для регулярных выражений, так и для путей:

 r"D:\Project\2014\archdata\folder1.ini"

спецификатор можно задавать в верхнем регистре

Плюсы такого решения в том, что не падает читабельность по сравнению с экранированием.

Добавить комментарий
0

Слеш экранируется только в исходном коде. Не путайте строковую константу в коде (текстовое представление строки) и соответствующую строку (сам объект) в памяти.

К примеру, "\t" в исходном коде создаёт строку с одним символом (tab). Но, если вызвать input() (Python 3) и набрать "\t", то результат уже: '"\\t"' (четыре символа: две кавычки + слеш + t). Чтобы получить tab, достаточно клавишу Tab нажать для input().

>>> len('\t') == 1
True
>>> len('\\t') == 2
True
>>> r'\t' == '\\t'

В последнем примере используется raw string literal. Оба выражения создают одну и ту же строку (в памяти никаких r'', только обычные строки/объекты).

При вводе/выводе слеш экранировать не нужно, если вы не пытаетесь ввод интерпретировать как исходный код Питона.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up