Необработанные строки (raw strings) в Python

В этом руководстве вы узнаете о необработанных строках (raw strings) в Python и о том, как их использовать для обработки строк, которые рассматривают обратную косую черту как буквальный символ.

Содержание

Что такое необработанные строки в 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)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *