Ответ 1
Необработанные строковые литералы не обрабатывают обратные слэши как инициирующие escape-последовательности, за исключением случаев, когда непосредственно следующий символ является символом кавычки, который разделяет литерал, и в этом случае обратный слеш действительно избегает его.
Мотивация проектирования заключается в том, что необработанные строковые литералы действительно существуют только для удобства ввода шаблонов регулярных выражений - и все, никакой другой цели проектирования для таких литералов не существует. И шаблоны RE никогда не должны заканчиваться обратной косой чертой, но они могут включать все виды символов кавычек, откуда правило.
Многие люди пытаются использовать необработанные строковые литералы, чтобы позволить им вводить пути Windows так, как они привыкли (с обратной косой чертой) - но, как вы заметили, это использование ломается, когда вам нужен путь, заканчивающийся обратной косой чертой. Обычно самое простое решение - использовать прямые косые черты, которые во время выполнения Microsoft C и во всех версиях Python полностью эквивалентны путям:
s = 'c:/path/to/folder/'
(примечание: не скрывайте встроенные имена, такие как str
, с вашими собственными идентификаторами - это ужасная практика, без каких-либо улучшений, и если вы не привыкнете избегать этой ужасной практики, однажды вы обнаружите, что ваши продажи со злобой - проблема отладки, когда какая-то часть вашего кода попирает встроенное имя, а другая часть должна использовать встроенное имя в его реальном значении).