Экранированные последовательности
Для полноценного представления структуры текста или его специфики нам нужны какие-то особые символы. Некоторые символы должны управлять курсором (еще называют «кареткой» – отголосок из прошлого от печатных машинок). Еще нужны какие-то символы с помощью которы можно выполнять какие-нибудь служебные задачи, например, обозначать шестнадцатеричные или восьмеричные коды символов. Для таких целей и существуют экранированные последовательности.
Экранированные последовательности — это последовательности, которые начинаются с символа » \ » за которым следует один или более символов.
Давайте сразу приведем пример:
Обратите внимание на то как функция print() осуществила вывод – в тех местах, где были последовательности ‘ \n ‘ она выполнила переносы строк. Вы, конечно же, догадались, что ‘ \n ‘ – это экранированная последовательность. Единственное, что стоит добавить так это то, что такие последовательности воспринимаются интерпретатором как единственный символ, т.е. несмотря на то что последовательность может состоять из нескольких символов ей соответствует всего один-единственный код. Например:
Таблица последовательностей
Экранированных последовательностей не так уж много, так что давайте сначала перечислим их все в таблице, а потом подробно рассмотрим назначение каждой из них.
Последовательность | Назначение |
---|---|
\newline | Если после символа » \ » сразу нажать клавишу Enter то это позволит продолжать запись с новой строки. |
\\ | Позволяет записать символ обратного слеша. |
\’ | Позволяет записать один символ апострофа. |
\» | Позволяет записать один символ кавычки. |
\a | Гудок встроенного в систему динамика. |
\b | Backspace, он же возврат, он же «пробел назад» – удаляет один символ перед курсором. |
\f | Разрыв страницы. |
\n | Перенос строки (новая строка). |
\r | Возврат курсора в начало строки. |
\t | Горизонтальный отступ слева от начала строки (горизонтальная табуляция). |
\v | Вертикальный отступ сверху (вертикальная табуляция). |
\xhh | Шестнадцатеричный код символа (две шестнадцатеричные цифры hh). |
\ooo | Восьмеричный код символа (три восьмеричные цифры ooo). |
\0 | Символ Null. |
\N | ID (идентификатор) символа в базе данных Юникода, или, проще говоря, его название в таблице Юникода. |
\uhhhh | Шестнадцатеричный код 16-битного символа Юникода (символ кодируемый двумя байтами). |
\Uhhhhhhhh | Шестнадцатеричный код 32-битного символа Юникода (символ кодируемый четырьмя байтами). |
\other | Под other понимается любая другая последовательность символов. Не является экранированной последовательностью (остается без изменений с сохранением в строке символа » \ «). |
Примеры
\newline — новая строка
Данный символ позволяет записывать очень длинные «короткие» строки (строки в одинарных кавычках или апострофах) в несколько строк. Как это работает? Просто начните вводить строку, в необходимом месте введите символ » \ » а потом сразу нажмите клавишу Enter и продолжайте ввод строки. Например:
Обратите внимание, что в результирующей строке вообще нет символа » \ «. И не забывайте что пробел тоже является символом, а последовательность \newline не является разделителем:
\\ — обратный слеш
Позволяет указывать в строке необходимое количество обратных слешей, что может пригодиться при работе с файловой системой в Windows или работой с LATEX:
Обратите на то как выполняется непосредственный вывод строк, в котором сохраняются экранированные последовательности и на то как выполняется вывод с помощью функции print() которая выполняет их интерпретацию и заменяет последовательности \\ на \ .
Новичков это немного сбивает с толку, так как они думают, что строка с путем D:\\\\мои документы\\книги\\ является неверной записью пути к директории, хотя это не так, потому что последовательность \\ интерпретируется как одино символ, которому ставится в соответствие один код, в чем легко убедиться:
\’ — апостроф
Последовательность \’ позволяет помещать внутрь строки необходимое количество апострофов:
\» — кавычка
Так же как и \’ позволяет помещать в строку необходимое количество кавычек:
\a — гудок динамика
Последовательность \a заставляет систему издать короткий звуковой гудок, который очень часто используется для предупреждения о чем-либо. Однако, услышите вы этот гудок или нет, как-то зависит от компьютера и операционной системы. Например я сейчас работаю на ноуте под Ubuntu и ничего не слышу, но на стационарном компьютере с Windows 7 все исправно работает. Использовать его или нет решайте сами, но в любом случае, этот символ никогда не выводится на экран:
\b — backspace (пробел назад)
Если вы хоть раз нажимали клавишу Backspace на клавиатуре, то вы уже знаете предназначение этой последовательности – удалять один символ перед курсором:
Если \b находится в конце строки, то удаления не происходит:
Однако, в общем случае все зависит от того сколько символов \b следует подряд друг за другом и что следует за ними:
Данная последовательность используется крайне редко. Но если вы все еще не догадались как она работает, то лучше воспринимайте его не как удаление символов, а как перемещение курсора влево. Например, в строке ‘AAAA\b\b\bC’ мы как бы ничего и не удаляли, на самом деле три символа ‘\b\b\b’ переместили курсор на три позиции влево, на на вторую букву ‘A’ и вместо нее напечатали символ ‘C’ .
Последовательность \b – это эхо из эры механических печатных машинок, у которых не было курсора, а была каретка, которую курсор и имитирует. Сейчас клавиша Backspace ассоциируется с удалением символа, но на самом деле, раньше выполнялось перемещение каретки на один символ влево, т.е. на одном и том же месте бумаги можно было напечатать несколько разных символов.
\f — разрыв страницы
Последовательность \f – указывает в каком месте заканчивается одна страница и начинается другая. Раньше он использовался для управления подачей бумаги в принтерах. Когда принтер встречал этот символ, это означало что ему надо было извлеч страницу и загрузить на печать следующий лист бумаги. Сейчас, он может встретиться (и то не факт, что встретится) разве что в исходных кодах некоторых языков программирования, в которых принято соглашение разбивать код на разделы с помощью этого символа. Например, интерпретатор Python способен учитывать \f при расчете отступов при анализе кода.
Данная последовательность переводит курсор на следующую строку и выполняет отступ, длина которого равна длине предшествоваишей \f части строки:
\n — перенос строки
Последовательность \n до банального проста – это просто перенос следующих за ним символов на следующую строку:
\r — возврат каретки
Последовательность \r возвращает курсор в начало строки, т.е. позволяет печатать одни символы «поверх» других. Например:
Данная последовательность позволяет зделать «полосу загрузки» или осуществлять вывод прогресса решения каких-нибудь задач. Но для этого нужно знать, что функция print() обладает параметром end который по умолчанию установлен в значение ‘\n’ , что заставляет заканчивать каждый вывод переводом на новую строку:
Параметр end определяет каким символом должна заканчиваться строка, т.е. мы можем сами задать такой символ (или символы):
Если мы зделаем end = ‘\r’ , то мы сможем печатать строки «поверх» друг друга, но терминал делает это настолько быстро, что мы не успеем ничего заметить. Обычно, загрузка и выполнение каких-то задач сопровождается небольшими задержками, давайте, мы съимитируем такую задержку с помощью функции sleep() модуля time :
\t — горизонтальная табуляция
Так же как и \n последовательность \t крайне проста – она просто делает один отступ (равносильно нажатию клавиши Tab):
\v — вертикальная табуляция
Последовательность \v очень похожа на \f и точно так же родом из тех времен, когда принтером приходилось управлять чуть ли не на прямую. Вот только эта последовательность в отличии от \f , не заставляла его загружать новую страницу, а перемещала его вниз по странице на указанное количество строк.
Но самое любопытное, что от этих раритетов в некоторых областях даже не собираются отказываться — некоторые документы и стандарты до сих пор используют последовательности \v и \f .
\xhh — шестнадцатеричный код символа
Последовательность \xhh позволяет делать запись строк, используя шестнадцатеричный код символов:
\ooo — восьмеричный код символа
Последовательность \ooo позволяет делать запись строк, используя восьмеричный код символов:
\0 — Null
Данная последовательность ведет себя так, словно ее нет. В старые-добрые времена механических принтеров, эта последовательность обозначала простой, т.е. ничего не делать. Сейчас ее можно до сих пор встретить в языке C, в конце символьных строк, причем далее за » \0 » другие цифры следовать не должны, иначе они будут восприниматься как другая экранированная восьмеричная последовательность. Ну а Python этот символ вообще никак не выводит:
Тем не менее этот символ в строке сохраняется и влияет на ее длину.
\N — идентификатор символа Юникода
Позволяет вводить символы в строку используя их название:
\uhhhh — 16-битный символ Юникода
Позволяет вводить символы в строку используя их двухбайтовый шестнадцатеричный код, причем данный способ позволяет вводить только двухбайтовые символы юникода (UTF-16BE):
\Uhhhhhhhh — 32-битный символ Юникода
Позволяет вводить символы в строку используя их четырехбайтовый шестнадцатеричный код, причем данный способ позволяет вводить только четырехбайтовые символы юникода (UTF-32BE):
\other — не экранированная последовательность
Если за символом » \ » следует что-то другое, не перечисленное в данном списке, то это не считается экранированной последовательностью, а обычной строкой в которой на ряду с остальными символами присутствует и символ » \ «:
Но внимательность все же не помешает:
Всегда экранируйте символ » \ » последовательностью » \\ » или используйте литерал неформатированных строк r’aaaa\bbbb’ .
Работа со строками в Python: литералы
Строки в Python — упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.
Это первая часть о работе со строками, а именно о литералах строк.
Литералы строк
Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках
Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
Экранированные последовательности — служебные символы
Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.
Экранированная последовательность | Назначение |
---|---|
\n | Перевод строки |
\a | Звонок |
\b | Забой |
\f | Перевод страницы |
\r | Возврат каретки |
\t | Горизонтальная табуляция |
\v | Вертикальная табуляция |
\N | Идентификатор ID базы данных Юникода |
\uhhhh | 16-битовый символ Юникода в 16-ричном представлении |
\Uhhhh… | 32-битовый символ Юникода в 32-ричном представлении |
\xhh | 16-ричное значение символа |
\ooo | 8-ричное значение символа |
\0 | Символ Null (не является признаком конца строки) |
«Сырые» строки — подавляют экранирование
Если перед открывающей кавычкой стоит символ ‘r’ (в любом регистре), то механизм экранирования отключается.
Но, несмотря на назначение, «сырая» строка не может заканчиваться символом обратного слэша. Пути решения:
Строки в тройных апострофах или кавычках
Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.
Это все о литералах строк и работе с ними. О функциях и методах строк я расскажу в следующей статье.
Работа с текстом в Python
\n — Перевод строки
\r — Возврат каретки
\t — Горизонтальная табуляция
\v — Вертикальная табуляция
Символ ‘r’ перед началом строки отключает экранирование:
такая строка не должна заканчиваться символом ‘ \’
Многострочный текст объявляется с помощью тройных кавычек:
text = »’Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat»’
text = «»»Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat»»»
Сложение (конкатенация) строк:
Повторение (дублирование) строк:
str = «Шустрая бурая лисица прыгает через ленивого пса»
print(str[2])
при отрицательном индексе, отсчет идет от конца строки
Срез строки: строка[start:end] , где start – начало среза, end – окончание
str = «Шустрая бурая лисица прыгает через ленивого пса»
print (str[14:20])
print (str[21:-19])
print (str[:7])
Поиск и замена:
str.find(find_str, [start],[end]) — Возвращает индекс первого вхождения / -1
str.rfind(find_str, [start],[end]) — Возвращает индекс последнего вхождения / -1
str.index(find_str, [start],[end]) — возвращает индекс первого вхождения / ValueError
str.rindex(find_str, [start],[end]) — возвращает индекс последнего вхождения / ValueError
str.replace(template, new) — замена шаблона в строке
Строки и списки:
str.split(symbol) — модифицирует строку в список
str.join(list)- модифицирует список в строку
Проверка строки:
Возвращает True, если условие истинно. В противном случае — False
str.isdigit() — все символы строки являются цифрами
str.isalpha() — все символы строки — буквы
str.isalnum() — все символы строки — цифры или буквы
str.islower() — все символы строки в нижнем регистре
str.isupper() — все символы строки в верхнем регистре
str.isspace() — строка cостоит из неотображаемых символов (пробел, ‘\n’, ‘\r’, ‘\t’ . )
S.istitle() — слова в строке начинаются с заглавной буквы
str.startswith(template) — строка начинается с template
str.endswith(template) — строка заканчивается template
Модификация строки (создание модифицированной копии строки):
str.upper() — преобразование к верхнему регистру
str.lower() — преобразование к нижнему регистру
str.capitalize() — преобразование первого символа строки в верхний регистр, а все остальные в нижний
str.lstrip([chars]) — удалить пробелы в начале строки
str.rstrip([chars]) — удалить пробелы в конце строки
str.strip([chars]) — удалить пробелы в начале и в конце строки
str.expandtabs([tabsize]) — все символы табуляции заменить одним или несколькими пробелами. По умолчанию, tabsize равен 8 пробелам
str.swapcase() — меняет регистр на противоположный
str.title() — первая буква каждого слова — в верхний регистр, остальные — в нижний
Форматирование строк
Для подстановки данных в строке, используется метод format