Необработанные строки (raw strings) в Python
В этом руководстве вы узнаете о необработанных строках (raw strings) в Python и о том, как их использовать для обработки строк, которые рассматривают обратную косую черту как буквальный символ.
- Что такое необработанные строки в Python?
- Использование Raw Strings для обработки пути к файлу в Windows
- Преобразование обычной строки в необработанную строку
Что такое необработанные строки в Python?
В Python, когда вы добавляете к строке префикс буквы r или R, например r’…’ и R’…’, эта строка становится необработанной строкой. В отличие от обычной строки, необработанная строка воспринимает обратную косую черту(\) как буквальный символ.
Необработанные строки полезны, когда вы имеете дело со строками, содержащими множество обратных косых черт, например, регулярными выражениями или путями к каталогам в Windows.
Для обозначения специальных символов, таких как символы табуляции и новой строки, Python использует обратную косую черту(\), обозначающую начало escape-последовательности. Например:
s = 'lang\tver\nPython\t3' print(s)
Выход:
lang ver Python 3
Однако необработанные строки воспринимают обратную косую черту(\) как буквальный символ. Например:
s = r'lang\tver\nPython\t3' print(s)
Выход:
lang\tver\nPython\t3
Необработанная строка аналогична обычной строке с обратной косой чертой(\), представленной двойной обратной косой чертой(\\):
s1 = r'lang\tver\nPython\t3' s2 = 'lang\\tver\\nPython\\t3' print(s1 == s2) # True
В обычной строке Python считает escape-последовательность одним символом:
s = '\n' print(len(s)) # 1
Однако в необработанной строке Python считает обратную косую черту(\) как один символ:
s = r'\n' print(len(s)) # 2
Поскольку обратная косая черта(\) экранирует одинарные кавычки(‘) или двойные кавычки(«), необработанная строка не может заканчиваться нечетным количеством обратных косых черт.
Например:
s = r'\'
Ошибка:
SyntaxError: EOL while scanning string literal
Или
s = r'\\\'
Ошибка:
SyntaxError: EOL while scanning string literal
Использование Raw Strings для обработки пути к файлу в Windows
ОС Windows использует обратную косую черту для разделения путей. Например:
c:\user\tasks\new
Если вы используете этот путь как обычную строку, Python выдаст ряд ошибок:
dir_path = 'c:\user\tasks\new'
Ошибка:
SyntaxError:(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape
Python рассматривает \u в пути как escape-символ Юникода, но не может его декодировать.
Теперь, если вы избежите первой обратной косой черты, у вас возникнут другие проблемы:
dir_path = 'c:\\user\tasks\new' print(dir_path)
Выход:
c:\user asks ew
В этом примере \t — это табуляция, а \n — новая строка.
Чтобы упростить задачу, вы можете превратить путь в необработанную строку следующим образом:
dir_path = r'c:\user\tasks\new' print(dir_path)
Преобразование обычной строки в необработанную строку
Чтобы преобразовать обычную строку в необработанную строку, используйте встроенную функцию repr(). Например:
s = '\n' raw_string = repr(s) print(raw_string)
Выход:
'\n'
Обратите внимание, что необработанная строка результата содержит кавычки в начале и конце строки. Для их удаления можно использовать срезы:
s = '\n' raw_string = repr(s)[1:-1] print(raw_string)