Python с нуля — часть 7: строки
Строки (string) один из наиболее часто используемых типов данных в Python.
Создать строку можно просто заключив символы в кавычки, при этом для Python одинарные кавычки ( ‘ ‘ ) имеют такое же значение, как и двойные ( » » ).
Создаётся строка простым присваивание значения переменной. Например:
Получение значений из строк
Для доступа к отдельным символам в строке используются квадратные скобки с указанием индекса символа, допустимо выполнение “среза” (slicing), с указанием начального и конечного индекса.
Результат выполнения этого кода:
Обновление данных в строках
Вы можете обновлять информацию в строке, переназначая данные переменной:
Примечание: вообще, строки в Python являются неизменяемыми (immutable) объектами, и прямое присваивание нового значения элементу списка вызовет ошибку:
Но можно воспользоваться операцией конкатенации (см. ниже) для этого. При этом – сам объект в памяти остаётся прежним:
Escape-последовательности
В таблице ниже приводится список символов, которые не отображаются на экране при обработке.
Они обрабатываются как в одинарных, так и в двойных кавычках.
| Backslash notation |
Hexadecimal character |
Description |
|---|---|---|
| a | 0x07 | звуковой сигнал или предупреждение |
| b | 0x08 | возврат на одну позицию |
| cx | control-x | |
| C-x | control-x | |
| e | 0x1b | escape |
| f | 0x0c | команда принтера |
| M-C-x | meta-Control-x | |
| n | 0x0a | новая строка |
| nnn | восьмеричное значение | |
| r | 0x0d | возврат каретки |
| s | 0x20 | пробел |
| t | 0x09 | табуляция |
| v | 0x0b | вертикальная табуляция |
| x | символ x | |
| xnn | шестнадцатеричное значение |
Специальные строковые операторы
| Operator | Description | Example |
|---|---|---|
| + | конкатенация – добавление значений с обеих сторон от оператора | a + b вернёт HelloPython |
| * | повторение – создаёт новую строку, в которой объединены копии той же строки | a*2 вернёт HelloHello |
| [] | срез (slice) – возвращает символ с указанным индексом | a[1] вернёт e |
| [ : ] | срез диапазона – возвращает символы с заданном диапазоне индексов | a[1:4] вернёт ell |
| in | членство (membership) – возвращает истину (true, 1) если заданный символ присутствует в строке | H in a вернёт 1 |
| not in | членство (membership) – возвращает истину (true, 1) если заданный символ не присутствует в строке | M not in a вернёт 1 |
| r/R | обычная строка (raw string) – подавляет значение escape-последовательностей; синтаксис таких строк такой же, как и у обычных строк, за исключением оператора r или R, который добавляется непосредтсвенно перед открывающей кавычкой | print r’n’ вернёт n и print R’n’ вернёт n |
| % | format – выполнение форматирования строки | см. далее |
Оператор форматирования строк
Одна из наиболее приятных возможностей в Python – оператор % . Этот оператор уникален для строковых типов данных и подобен функции printf() из языка С:
Другой, более наглядный и простой пример:
В таблице представлен полный список символов, которые могут быть использованы с оператором % :
| Format Symbol | Conversion |
|---|---|
| %c | один символ |
| %s | преобразование строки данными другого str()-объекта |
| %i | алиас %d |
| %d | целое десятичное число |
| %u | то же, что и %d (устарев?) |
| %o | восьмеричное целое |
| %x | шестнадцатеричное целое (строчные буквы) |
| %X | шестнадцатеричное целое (ПРОПИСНЫЕ буквы) |
| %e | экспоненциальное представление (строчная ‘e’) |
| %E | экспоненциальное представление (прописная ‘e’) |
| %f | вещественное число в десятичном виде |
| %g | краткая версия для %f и %e |
| %G | краткая версия для %f и %E |
Кроме этого, есть дополнительные возможности:
| Symbol | Functionality |
|---|---|
| * | argument specifies width or precision |
| – | left justification |
| + | display the sign |
| <sp> | leave a blank space before a positive number |
| # | add the octal leading zero ( ‘0’ ) or hexadecimal leading ‘0x’ or ‘0X’, depending on whether ‘x’ or ‘X’ were used. |
| 0 | pad from left with zeros (instead of spaces) |
| % | ‘%%’ leaves you with a single literal ‘%’ |
| (var) | mapping variable (dictionary arguments) |
| m.n. | m is the minimum total width and n is the number of digits to display after the decimal point (if appl.) |
Тройные кавычки
Тройные кавычки в Python позволяют располагать текст в несколько строк и использовать в нём специальные символы, такие как табуляция ( t ), новая строка ( n ) и другие.
Примечание: кроме того, в функциях текст, заключённый в тройные кавычки, используется для документации функции.
Синтаксис тройных кавычек представляет собой набор из трёх открывающих последовательных одинарных или двойных кавычек – и трёх закрывающих.
Результат выполнения этого кода:
Обратите внимание, что каждый специальный символ был превращен в его “печатную форму”, а новые строки отображаются либо прямым переводом строки в тексте, либо escape-последовательностью ( n ).
“Сырые строки” (raw strings) не обрабатывают символ обратно слеша как специальный символ. Каждый символ, который указан в такой строке будет отображён “как есть”:
Результат выполнения этого кода:
Теперь – давайте сделаем “необработанную строку” с помощью символа r перед открывающей кавычкой:
Строки с unicode
Обычные строки в Python записываются с помощью таблицы 8-ми битной ASCII символов, тогда как Unicode-строки хранятся в 16-ти битной таблице. Это позволяет использовать более разнообразные символы в ней, включая специальные символы различных языков.
Мы ограничимся такой Unicode-строкой:
Результат её выполнения:
Как видно, Unicode-строки используют объявление с помощью символа u , так же как raw-строки используют объявление с помощью префикса r .
Встроенные строковые методы (или методы строк)
UPD: смотрите более полное описание строковых методов тут>>>.
В Python имеются такие встроенные методы для управление строками:
Работа со строками в Python

Язык программирования Python поддерживает разные виды данных. В этой статье, предназначенной для начинающих, будет рассмотрен строковый тип string и основные операции, связанные с обработкой строк. Среди них:
- создание строк;
- конкатенация строк;
- выборка символов по индексам.
Создание строки
Строки (strings) используются для хранения текстовых данных. Их создание возможно одним из 3-х способов. Тут все просто, т. к. возможно применение разных кавычек: одинарных, двойных либо тройных. То есть в эти кавычки и нужно обернуть текст:
otus_string_1 = ‘Привет, друзья!’
otus_string_2 = «Хотите выучить Python?»
otus_string_3 = «»»Ждем вас на наших курсах!»»»
Кавычки в данном случае — это строковые литералы, позволяющие создавать в памяти программы Python объект типа string.
Нужно понимать, что разницы, какие именно кавычки использует разработчик, нет. Главное — открывающие и закрывающие кавычки должны быть однотипными. Если же поставить вначале одинарную кавычку, а в конце двойную — ошибки не избежать.
Можно ли применять кавычки внутри строк?
Можно, для чего есть несколько вариантов. Один из них — использовать внутри строки кавычки другого типа. К примеру, наружные кавычки являются двойными, а внутренние — одинарными. Или наоборот:
otus_string_1 = ‘Хотите выучить «Пайтон?» и стать профессионалом’
otus_string_2 = «Запишитесь на курс в ‘Отус’ уже сегодня!»
Второй метод — экранирование. Для экранирования используется обратный слэш. Вот, как это выглядит в коде:
otus_string_1 = «Я и \’Пайтон\’ созданы друг для друга»
У тройных кавычек есть особенности. Заключенные в них строки поддерживают многострочность, то есть для переноса не нужен символ \n. А еще внутри тройных кавычек можно вставлять как двойные, так и одинарные кавычки:
Вывод будет следующим:

Строки являются неизменяемыми объектами (как и числа). В этом легко убедиться, если создать переменные с одинаковыми именами, а потом вывести на экран их id — идентификаторы будут различаться:
otus_string = ‘Привет, друзья!’
otus_string = «Хотите выучить Python?»

Рекомендуется повторить вышеописанные операции самостоятельно и попрактиковаться. Сделать это можно, даже не устанавливая «Пайтон», используя любой онлайн-компилятор.
Конкатенация строк
Конкатенация — это сложение строк, в результате чего они соединяются друг с другом. Самый простой способ сделать это — использовать простейший оператор сложения, то есть знак «+».

Это простейший синтаксис, причем можно брать сколько угодно строк и соединять их:
otus_string = «Я » + «просто » + «обожаю » + «Python!»

Если надо, можно задействовать и операнд умножения. Он позволит продублировать строку, умножив ее на соответствующее значение, которое разработчик передаст в коде.
otus_string = «Code» * 10

Важное свойство строк — длина (число символов). Узнать количество символов, из которых состоит строка, можно, задействовав встроенную функцию len (от англ. length — длина).
Код ниже посчитает число символов:
otus_string = «Python is a good for coding»
Итого: строка содержит 27 символов (пробел — тоже символ):

Можно попробовать передать пустую строку и постараться посчитать число символов в ней. Если вставить хотя бы пробел, на выходе получится 1 символ, если не вставлять вообще ничего, число символов будет равняться нулю.

Несколько слов о методах строк
Ранее уже использовались такие методы, как print и id. Есть свои методы и у строковых данных — они принадлежат конкретному классу str. Чтобы вывести их, можно воспользоваться функцией dir:

Зубрить каждый из них нет необходимости, так как нужные методы будут запоминаться с практикой. Чтобы обратиться к одному из них, следует сначала обратиться к соответствующему объекту, потом поставить точку, потом написать нужный метод и круглые скобки. Лучше это увидеть:

Что отображено на скриншоте выше:
- была создана новая строка string_1 с содержимым “oTUs”;
- вначале задействовали метод title — вывод слова получился с заглавной буквы;
- потом использовали метод для верхнего регистра upper — заглавными (прописными) стали все символы строки;
- далее применили lower — все символы стали маленькими (строчными), то есть перешли в нижний регистр.
Какие еще есть методы:
- replace —для замены одной части исходной строки (подстроки) на другую;
- split — позволяет разделить (не удалить!) строку по переданному делителю, возвращает список;
- join — склеивает подстроки по конкретному разделителю;
- strip. В языке программирования Python strip используется для обрезки ненужных символов, причем ненужный символ передается в виде аргумента. Обрезку можно выполнять по-разному: если с первого символа слева, то применяют не strip, а lstrip, если справа, то rstrip (с конца строки, если интересует последний символ).
Индексы
В «Питоне» у каждого символа есть свой номер — индекс. Если разработчика интересует поиск какого-нибудь символа, к нему можно обратиться. Код ниже возвращает индекс для каждого символа из слова Otus:

Тут важен один момент: индексация начинается не с единицы, а с нуля, поэтому первый символ имеет индекс 0.
Дополнительно: преобразование символа в целое число
Компьютеры хранят все данные в виде цифр, и символьных данных это тоже касается. Для представления символов строкового типа String применяют схему перевода. Самая простая из них — ASCII. Если нужно вернуть число для какого-нибудь конкретного символа, используют функцию ord. К примеру, для символа «a» кодовое значение по ASCII будет равняться 97, а для «#» — 35.

Кроме ASCII, также широко известен Unicode, который тоже поддерживается «Питоном».
Строки — Основы языка Python
С первыми двумя все понятно, это точно строки, мы уже работали с подобными конструкциями и говорили, что строки — это наборы символов. Любой одиночный символ в кавычках — это строка. Пустая строка '' — это тоже строка. То есть строкой мы считаем всё, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.
Ранее в уроках мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:
Теперь представьте, что вы хотите напечатать строчку Dragon's mother. Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:
Такая программа не будет работать. С точки зрения Python строчка началась с одинарной кавычки, а потом закончилась после буквы n. Дальше были символы s mother без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: ') . Этот код синтаксически некорректен (это видно даже по тому, как подсвечен код).
Здесь нам помогут именно двойные кавычки. Такой вариант программы отработает корректно:
Теперь интерпретатор знает, что строка началась с двойной кавычки — значит и закончиться должна на двойной кавычке. А одинарная кавычка внутри стала частью строки. Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки не важно.
А что, если мы хотим создать такую строку:
В ней есть и одинарные и двойные кавычки. Как быть в этой ситуации? Нужно каким-то образом указать интерпретатору считать каждую кавычку частью строки, а не началом или концом строки.
Для этого используют символ экранирования: \ (обратный слэш). Если поставить \ перед кавычкой (одинарной или двойной), это скажет интерпретатору о том, что кавычку нужно рассматривать не как начало или конец строки, а как часть строки.
Посмотрите внимательно: нам нужно было добавить \ для двойных кавычек, но не для одинарной (апостроф), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.
А что, если нужно вывести сам обратный слеш? Точно так же, как и любой другой специальный символ, его надо экранировать самим собой.
Экранированные последовательности
Мы хотим показать вот такой диалог:
Если вывести на экран строку с таким текстом:
Не то, что мы хотели. Строки расположены друг за другом, а не одна ниже другой. Нам нужно как-то сказать интерпретатору «нажать на энтер» — сделать перевод строки после вопросительного знака. Это можно сделать, используя символ перевода строки: \n .
\n — это пример экранированной последовательности (escape sequence). Их еще называют управляющими конструкциями. Эти конструкции не являются видимой частью строки, их нельзя увидеть глазами в том же виде, в котором они были набраны.
Набирая текст в каком-нибудь Word, вы нажимаете на Enter в конце строчки. Редактор при этом ставит в конец строчки специальный невидимый символ, который называется LINE FEED (LF, перевод строчки). В некоторых редакторах можно даже включить отображение невидимых символов. Тогда текст будет выглядеть примерно так:
Устройство, которое выводит соответствующий текст, учитывает этот символ. Например, принтер при встрече с LF протаскивает бумагу вверх на одну строку, а текстовый редактор переносит весь последующий текст ниже, также на одну строку.
Хотя таких символов не один десяток, в программировании часто встречаются всего несколько. Кроме перевода строки, к таким символам относятся табуляция \t (разрыв, получаемый при нажатии на кнопку Tab) и возврат каретки \r (только в Windows). Распознать управляющую конструкцию в тексте проще всего по символу \ . Нам, программистам, часто нужно использовать, например, перевод строки \n для правильного форматирования текста.
На экран выведется:
Обратите внимание на следующие моменты:
-
Не имеет значения, что стоит перед или после \n : символ или пустая строка. Перевод будет обнаружен и выполнен в любом случае.
Помните, что строка может содержать лишь один символ или вообще ноль символов? А еще строка может содержать только \n :
Здесь мы выводим одну строку с именем, потом одну строку «перевод строки», а потом еще одну строку. Программа выведет на экран:
Несмотря на то, что в исходном тексте программы последовательность типа \n выглядит как два символа, с точки зрения интерпретатора это специальный один символ.
Если нам понадобится вывести \n именно как текст (два отдельных печатных символа), то можно воспользоваться уже известным нам способом экранирования, добавив еще один \ в начале. То есть последовательность \\n отобразится как символы \ и n , идущие друг за другом.
Небольшое, но важное замечание про Windows. В Windows для перевода строк по умолчанию используется \r\n . Такая комбинация хорошо работает только в Windows, но создает проблемы при переносе в другие системы (например, когда в команде разработчиков есть пользователи как Windows, так и Linux). Дело в том, что последовательность \r\n имеет разную трактовку в зависимости от выбранной кодировки (рассматривается позже). По этой причине в среде разработчиков принято всегда использовать \n без \r , так как LF всегда трактуется одинаково и отлично работает в любой системе. Не забудьте настроить ваш редактор на использование \n .
Конкатенация
В веб-разработке программы постоянно оперируют строками. Всё, что мы видим на сайтах, так или иначе представлено в виде текста. Этот текст чаще всего динамический, то есть полученный из разных частей, которые соединяются вместе. Операция соединения строк в программировании называется конкатенацией.
Склеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью строки, а правый — правой. Вот еще несколько примеров:
Как видите, строки можно склеивать, даже если они записаны с разными кавычками.
Пробел — такой же символ, как и другие, поэтому сколько пробелов поставить в строке, столько и получится в итоговой строке: